如何在同一个表中创建具有多个导航属性的实体?

时间:2011-09-27 18:28:57

标签: entity-framework entity-framework-4

这个问题在一些变化中被问过,但我相信我的问题有点独特。

我正在使用数据库优先方法与Entity Framework 4,我正在尝试将Account映射到多个Addresses,并将同一帐户映射到BillingAddressShippingAddress

这是我的数据库架构: 帐户

  • ID
  • BillingAddressID
  • ShippingAddressID

地址

  • ID
  • 的AccountID

我有3个外键。

  1. Account.BillingAddressIDAddress.ID
  2. Account.ShippingAddressIDAddress.ID
  3. Address.IDAccount.ID
  4. 我想要进行以下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)
    

    有什么想法?谢谢!

0 个答案:

没有答案