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.

È stato utile?

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à:

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting Cominciato-con-ef-using-mvc / attuazione ereditarietà-con-la-entità-quadro-in-un-asp-mvc-net-applicazione

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));
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top