Question

Je viens de commencer à jouer avec des entités et LINQ rencontré un problème que je ne peux pas comprendre.

Je reçois cette erreur:

  

membre de condition 'de RelatedResources.TypeID' avec une condition autre que 'IsNull = False' est mis en correspondance. Soit supprimer la condition sur RelatedResources.TypeID ou le retirer de la cartographie.

La condition qui existe est un champ TypeID dans l'entité abstraite RelatedResource qui définit le type de RelatedResource (Livre, Link, guide, etc.). TypeID est également une clé étrangère et est mis en correspondance dans l'association avec l'entité Type de ressource. Je pense que c'est le problème, mais je ne sais pas comment ou pourquoi je devrais changer cela.

Était-ce utile?

La solution

Cela se produit généralement lorsque vous avez TypeId comme condition et utiliser aussi comme une propriété. Il pourrait causer des problèmes parce que vous utilisez pour cartographier l'association avec ResourceType et l'utiliser comme condition pour l'héritage.

Autres conseils

est RelatedResources.TypeID défini comme non nul (ie. 'IsNull = false') dans la base de données et dans le schéma entityframework?

Je ne sais pas, vous pouvez avoir tous les deux ce domaine en tant que sous condition et agit comme une clé étrangère à une autre table.

Et auriez-vous besoin si vous en utilisant l'héritage conditionnel pour déterminer le type?

Sons comme table par hiérarchie (TPH) Erreur de l'héritage:

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting -started avec ef utilisant-mvc / mise en œuvre-héritage-à-la-entité-cadre en un-asp-net-mvc application

Utilisez [NotMapped] sur la propriété de la classe de base.

code pseudo:

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));
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top