这个问题在一些变化中被问过,但我相信我的问题有点独特。
我正在使用数据库优先方法与Entity Framework 4,我正在尝试将Account
映射到多个Addresses
,并将同一帐户映射到BillingAddress
和ShippingAddress
。
这是我的数据库架构: 帐户
地址
我有3个外键。
Account.BillingAddressID
至Address.ID
Account.ShippingAddressID
至Address.ID
Address.ID
至Account.ID
我想要进行以下POCO设置:
public class Account {
public int ID { get; set; }
public virtual Address BillingAddress { get; set; }
public virtual Address ShippingAddress { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
public class Address {
public int ID { get; set; }
public int AccountID { get; set; }
}
然而,当我这样做并尝试使用地址创建一个新帐户时,我收到以下错误:
“保存不公开其关系的外键属性的实体时发生错误。”
我有一个想法是将架构转换为帐户和地址之间的完全多对多关系。然后我想我可以在AccountAddresses表中使用Billing vs. Shipping vs. Other并在外键中使用它,但我真的很好奇,如果我可以让它按原样工作。
Account a = new Account();
// snip: add some account properties
Account.Addresses.Add(new Address {
// snip: some properties here
});
context.SaveChanges();
==> ERROR (as mentioned above)
有什么想法?谢谢!