慣例により、EF6は、いわゆる共有主キーの関連付け 、ここで、依存エンティティのPKは、プリンシパルエンティティへのFKとしても機能します。
あなたの場合、それはAccount.Idを考慮します CustomerへのFKになる 、自動生成されるため、問題の例外が発生します。
追加の問題は、EF6が明示的なFKプロパティとの1対1の関係をサポートしていないことです(HasForeignKeyはありません) 1対多の関係に似た流暢なAPI)。
したがって、AccountIdを削除する必要があります モデルからプロパティを取得し、ナビゲーションプロパティのみを残します。また、強く必要というわけではありませんが、命名規則に従い、Accountと呼ぶのがよいでしょう。 AccountValueではなく 。
つまり、置き換えます
[Column("CUSTOMER_ID")]
public int? CustomerId { get; set; }
public virtual Customer CustomerValue { get; set; }
と
public virtual Customer Customer { get; set; }
FK列名は、MapKeyを使用して指定できます。 流暢なAPI:
modelBuilder.Entity<Customer>()
.HasRequired(c => c.Account)
.WithRequiredPrincipal(a => a.Customer)
.Map(m => m.MapKey("CUSTOMER_ID")); // <--
これで完了です。
これで、次のように、最初に新しいCustomerが正しく挿入されます。 次に、新しいAccount それを参照する:
var account = new Account
{
AccountNumber = "00123456",
Customer = new Customer { FirstName = "Joe" }
};
db.Accounts.Add(account);
db.SaveChanges();