11

我刚开始使用 Linq to entity 并遇到了一个我无法弄清楚的问题。

我收到此错误:

条件成员 'RelatedResources.TypeID' 的条件不是 'IsNull=False' 被映射。删除 RelatedResources.TypeID 上的条件或将其从映射中删除。

存在的条件是抽象实体 RelatedResource 中的 TypeID 字段,它定义了 RelatedResource 的类型(书籍、链接、指南等)。TypeID 也是一个外键,映射在与资源类型实体的关联中。我认为这是问题所在,但我不知道如何或为什么要改变它。

4

3 回答 3

9

当您将 TypeID 作为条件并将其用作属性时,通常会发生这种情况。它可能会导致问题,因为您使用它来映射与 ResourceType 的关联并将其用作继承的条件。

于 2010-02-04T15:43:25.500 回答
0

RelatedResources.TypeID在数据库和实体框架模式中设置为非空(即'Isnull = false')?

不确定您是否可以将该字段作为条件字段并充当另一个表的外键。

如果您使用条件继承来确定类型,您是否需要这样做?

于 2010-02-04T15:42:30.050 回答
0

听起来像每层次表(TPH)继承错误:

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in- an-asp-net-mvc-应用程序

[NotMapped]在基类属性上使用。

伪代码:

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));
    }
}
于 2017-07-01T21:43:54.083 回答