Ho 2 database separati e quindi 2 DbContext separati in ASP.Net Core / EFCore.
Ho un oggetto che si trova in un database, che ha una "chiave esterna" che punta su un altro database.
Diciamo che ho un database pieno di eventi e un altro database geografico con le città. Ho un cityId sulla mia classe di eventi.
public class Event
{
public int Id {get;set;}
public string Name {get;set;}
public string CityId {get;set;}
public virtual City City {get;set;}
}
public class City
{
public int Id {get;set;}
public string Name {get;set;}
}
È possibile Include
la proprietà City in qualche modo quando si esegue una query sul primo DbContext?
No. Non è possibile, dovrai interrogare indipendentemente l'altro contesto.
var event = eventContext.Events.Find(eventId);
event.City = geoContext.Cities.Find(event.CityId);
FWIW, devi contrassegnare la proprietà City
su Event
come NotMapped
. In caso contrario, EF creerà una tabella Cities
nello stesso database degli Events
e aggiungerà una chiave esterna effettiva a quella tabella su Events
, anche se la City
viene effettivamente gestita da un contesto diverso.
Dbcontext è un ambito di database!
Potresti memorizzare solo un valore int! Senza proprietà di navigazione!
Perché tutte le chiavi esterne nel database non possono fare riferimento a un altro database! Ef core è un po 'di astrazione sul database! Molti dos RDBms non hanno permesso chiavi esterne a un altro database!
U potrebbe innescare una sorta di integrità! Aggiungi relazione Chiave esterna tra due database
Non è una buona pratica!