0

特定の条件下で同じタイプのエンティティを除外するエンティティがあります。これを達成するために、次のようなエンティティ クラスがあります。

public class Entity
{
    public int ID { get; set; }
    public virtual ICollection<EntityExcludedEntity> ExcludedEntities { get; set; }
}

public class ExcludedEntity
{
    public int ID { get; set; }

    [Timestamp]
    public byte[] RowVersion { get; set; }

    public int EntityID { get; set; }
    public virtual Entity Entity { get; set; }

    public int ExcludedEntityID { get; set; }
    public virtual Entity ExcludedEntity { get; set; }
}

//declared in the ExcludedEntity mapping class.
public ExcludedEntityMapping()
{
    HasRequired(t => t.Entity).WithMany(t => t.ExcludedEntity).HasForeignKey(t => t.EntityID)
    HasRequired(t => t.ExcludedEntity).WithMany(t => t.ExcludedEntity).HasForeignKey(t => t.ExcludedEntityID);
}

これにより、EF がEntity_IDモデルで呼び出される 3 番目の列と外部キー フィールドを作成します。ここで別の関係が定義されていると思われるようですが、理由がわかりません。

作成されたテーブルの外部キーに関連する部分は次のとおりです。

.ForeignKey("dbo.Entities", t => t.EntityID)
.ForeignKey("dbo.Entities", t => t.ExcludedEntityID)
.ForeignKey("dbo.Entities", t => t.Entity_ID)
4

1 に答える 1

0

この投稿は、答えを見つけるのに役立ちました。

基本的に、EF は同じエンティティ フィールドに対して 2 つの外部キーを持つことはできません。同じエンティティに対して 2 つの外部キーを作成する必要がある場合は、それらを異なるフィールドにバインドする必要があります。したがって、この例では:

public class Entity
{
    public int ID { get; set; }
    public virtual ICollection<EntityExcludedEntity> ExcludingEntities { get; set; }
    public virtual ICollection<EntityExcludedEntity> ExcludedFromEntities { get; set; }
}

そしてこの構成:

public DBConceptAnswerExcludedAnswerMapping()
{
    HasRequired(t => t.Entity).WithMany(t => t.ExcludingEntities).HasForeignKey(t => t.EntityID);
    HasRequired(t => t.ExcludedEntity).WithMany(t => t.ExcludedFromEntities).HasForeignKey(t => t.ExcludedEntityID);
}

問題を解決します。

于 2015-04-23T14:12:14.377 に答える