私は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 にポイティングする方法はありますか?