慣例により、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();