関係を持つ 2 つのモデルを取得しました。
public class Customer
{
public Customer()
{
CustomerSites = new List<CustomerSite>();
}
public IList<CustomerSite> CustomerSites { get; set; }
}
public class CustomerSite
{
public Guid CustomerId { get; set; }
public Customer Customer { get; set; }
}
関係は流暢なAPIによって構築されます:(私は以下のステートメントの1つだけでも試しました)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<CustomerSite>()
.HasRequired(x => x.Customer)
.WithMany(x => x.CustomerSites)
.HasForeignKey(x => x.CustomerId);
modelBuilder.Entity<Customer>()
.HasMany(x => x.CustomerSites)
.WithRequired(x => x.Customer)
.HasForeignKey(x => x.CustomerId);
}
私の質問は、このコードが以下の例のようにデータベースへの二重外部キーを生成する理由です。
"dbo.CustomerSites",
c => new
{
CustomerId = c.Guid(nullable: false),
Customer_Id = c.Guid(),
})
.ForeignKey("dbo.Customers", t => t.CustomerId, cascadeDelete: true)
.ForeignKey("dbo.Customers", t => t.Customer_Id)
Customer_Id ではなく、1 つの CustomerId のみである必要があります。ご覧のとおり、これも nullable です。データベースコンテキストでこの列を削除すると、更新時に例外がスローされます。これはかなり怪しいと思います……。