3

主キーが他の 2 つのテーブルへの 2 つの外部キーで構成されるエンティティがあります。次のように構成していますが、テーブルは 2 つの FK 参照で生成されます。

テーブル:

domain.Entity1
    MorePK (PK, FK, int, not null)
    Entity2_Id (PK, FK, int, not null)
    Entity3_Id (PK, FK, int, not null)
    OtherData (varchar, null)
    Entity2_Id1 (FK, int, null)
    Entity3_Id1 (FK, int, null)

以下から生成されます。

public Entity1
{
    public int MorePK { get; set; }
    public int Entity2_Id { get; set; }
    public int Entity3_Id { get; set; }

    public string OtherData { get; set; }

    public virtual Entity2 Entity2 { get; set; }
    public virtual Entity3 Entity3 { get; set; }
}

public Entity2
{
    public int Id { get; set; }
    public virtual List<Entity1> Entity1s { get; set; }
}

public Entity3
{
    public int Id { get; set; }
    public virtual List<Entity1> Entity1s { get; set; }
}

public class Entity1Config : EntityTypeConfiguration<Entity1>
{
    HasKey(k => new { k.MorePK, k.Entity2_Id, k.Entity3_Id });

    HasRequired(p => p.Entity2)
        .WithMany()
        .HasForeignKey(p => p.Entity2_Id);

    HasRequired(p => p.Entity3)
        .WithMany()
        .HasForeignKey(p => p.Entity3_Id);

    Property(x => x.Entity2_Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    Property(x => x.Entity3_Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}

行をコメントアウトすると

public virtual List<Entity1> Entity1s { get; set; }

Entity2 と Entity3 では、DB を正しく生成しますが、EF にはナビゲーション プロパティが必要だと思いますか? 適切なデータベース スキーマを取得する正しい方法は何ですか?

4

1 に答える 1

2

私はそれを考え出した!この HasMany を外部エンティティ構成に追加します。

public Entity2Config : EntityTypeConfiguration<Entity2>
{
    HasMany(x => x.Entity1s)
        .WithRequired(x => x.Entity2)
        .HasForeignKey(x => x.Entity2_Id);
}

public Entity3Config : EntityTypeConfiguration<Entity3>
{
    HasMany(x => x.Entity1s)
        .WithRequired(x => x.Entity3)
        .HasForeignKey(x => x.Entity3_Id);
}
于 2013-02-01T02:08:49.937 に答える