0

私は3つのエンティティを持っています:

public class MainEntity()
{
    public long Id { get; set; }

    public long EntityAId { get; set; }
    public EntityA OptionalEntityA { get; set; }

    public long EntityBId { get; set; }
    public EntityB OptionalEntityB { get; set; }

    public string SProp { get; set; }
}

public class EntityA()
{
    public long Id { get; set; }

    public long MainEntityId { get; set; }
    public MainEntity RequiredEntity { get; set; }
}

public class EntityB()
{
    public long Id { get; set; }

    public long MainEntityId { get; set; }
    public MainEntity RequiredEntity { get; set; }
}

3 つのエンティティにはすべて、データベースによって生成された独自の ID があります。

Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

次のようにするために、MainEntity と EntityA および EntityB の間のリレーションシップを定義するにはどうすればよいですか。

  • MainEntity は 0 個または 1 個の EntityA を持つことができます
  • MainEntity は 0 個または 1 個の EntityB を持つことができます
  • EntityA には 1 つの MainEntity が必要です
  • EntityB には 1 つの MainEntity が必要です

私の MainEntityConfigurationMap では、次のような関係を定義しました。

HasOptional(m => m.OptionalEntityA).WithRequired(ea => ea.RequiredEntity);
HasOptional(m => m.OptionalEntityB).WithRequired(eb => eb.RequiredEntity);

生成された移行を見ると、EntityA については次のようになります。

        CreateTable(
            "dbo.EntityA",
            c => new
                {
                    Id = c.Long(nullable: false, identity: true),
                    MainEntityId = c.Long(nullable: false),
                })
            .PrimaryKey(t => t.Id)
            .ForeignKey("dbo.MainEntity", t => t.Id)
            .Index(t => t.Id);

Entity Framework はここで共有主キーを定義していますが、それを回避して MainEntityId を MainEntity.Id にポイティングする方法はありますか?

4

2 に答える 2