11

エンティティに対してLinqをいじり始めたところ、理解できない問題が発生しました。

このエラーが発生します:

'IsNull=False'以外の条件を持つ条件メンバー'RelatedResources.TypeID'がマップされます。RelatedResources.TypeIDの条件を削除するか、マッピングから削除します。

存在する条件は、RelatedResourceのタイプ(ブック、リンク、ガイドなど)を定義する抽象エンティティRelatedResourceのTypeIDフィールドです。TypeIDも外部キーであり、ResourceTypeエンティティとの関連付けでマップされます。これが問題だと思いますが、どうやって、なぜこれを変えればいいのかわかりません。

4

3 に答える 3

9

これは通常、TypeIDを条件として使用し、それをプロパティとして使用する場合に発生します。これを使用してResourceTypeとの関連付けをマップし、継承の条件として使用しているため、問題が発生している可能性があります。

于 2010-02-04T15:43:25.500 に答える
0

データベースとentityframeworkスキーマでnullではRelatedResources.TypeIDないように設定されていますか(つまり、'Isnull = false')?

そのフィールドを条件付きとして持つことができ、別のテーブルへの外部キーとして機能することができるかどうかはわかりません。

また、条件付き継承を使用してタイプを判別する場合は、そうする必要がありますか?

于 2010-02-04T15:42:30.050 に答える
0

table-per-hierarchy(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-application

[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 に答える