Entity Framework con l'ereditarietà, condizioni, e chiave esterna
-
18-09-2019 - |
Domanda
Ho appena iniziato a giocare con LINQ to entità e sono imbattuto in un problema che non riesco a capire.
sto ottenendo questo errore:
membro Condizione 'RelatedResources.TypeID' con una condizione diversa da 'IsNull = False' è mappato. Rimuovere la condizione RelatedResources.TypeID o rimuoverlo dalla mappatura.
La condizione che esiste è un campo TypeID nel RelatedResource entità astratta che definisce il tipo di RelatedResource (libro, Link, guida, ecc). TypeID è anche una chiave esterna ed è mappato in associazione con l'entità tipo di risorsa. Credo che questo sia il problema, ma non so come o perché dovrei cambiare questo.
Soluzione
Che di solito succede quando si ha typeid come una condizione e anche usarlo come una proprietà. Potrebbe essere la causa dei problemi, perché lo si utilizza per mappare l'associazione con ResourceType e di utilizzarlo come condizione per l'eredità.
Altri suggerimenti
È RelatedResources.TypeID
impostato per essere non nullo (es. 'Isnull = false') nel database e nello schema EntityFramework?
Non sono sicuro sia si può avere quel campo come un condizionale e agisce come una chiave esterna a un'altra tabella.
E avresti bisogno per se si utilizza l'eredità condizionale per determinare il tipo?
Suona come tabella per gerarchia (TPH) Errore eredità:
Usa [NotMapped]
sulla proprietà classe di base.
pseudo codice:
public abstract class MyBaseClass
{
[NotMapped]
public MyEnum MyEnum { get; protected set; }
}
public class DerivedOne: MyBaseClass
{
public DerivedOne()
{
MyEnum = MyEnum.Value1;
}
public string MyDerivedOneString { get; set; }
}
public class DerivedTwo: MyBaseClass
{
public DerivedTwo()
{
MyEnum = MyEnum.Value2;
}
}
public class MyDbContext : DbContext
{
DbSet<MyBaseClass> MyBaseClass { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyBaseClass>()
.Map<DerivedOne>(x => x.Requires("MyEnum").HasValue((int)MyEnum.Value1))
.Map<DerivedTwo>(x => x.Requires("MyEnum").HasValue((int)MyEnum.Value2));
}
}