DBContext在更新时不更新外键

时间:2013-04-16 14:48:23

标签: entity-framework foreign-keys dbcontext

我们正在从EF4迁移到EF5,其中一部分是从POCO Generator创建的类转移到DBContext生成的类。但是,我们现在看到的问题是未在更新时设置外键。

我有以下

    public abstract partial class Contact
    {
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public Nullable<int> AddressID { get; set; }

      public virtual Address Address { get; set; }
    }

    public partial class UserContact : Contact
    {
      public string Description { get; set; }
      public string Notes { get; set; }
    }

    public partial class Address
    {
      public string Line1 { get; set; }
      public string Line2 { get; set; }
    }

如果我创建没有地址的联系人,在我的第一个操作中,然后更新联系人以在下一个操作中添加地址,联系人中的AddressID没有被填充 - 它保持为空。所以,当我这样做时:

    UserContact contact = new UserContact
    {
      FirstName = "fname",
      LastName = "lname"
    };
    int contactID = _contactAccessor.AddContact(contact); // add contact no address

    UserContact retContact = m_contactAccessor.GetContact(contactID);
    retContact.Address = new Address
    {
      Line1 = "line1",
      Line2 = "line2",          
    };        
    m_contactAccessor.UpdateContact(retrievedContact); // add an address to the contact

在ContactAccessor中,我的UpdateContact方法执行此操作:

   public void UpdateContact(UserContact userContact)
   {
      UserContact retrievedContact = (from c in context.Contact.OfType<UserContact>()
                               .Include(c => c.Address)
                                where (c.ID == userContact.ID)
                                select c).FirstOrDefault());

      retrievedContact.Address = userContact.Address;
      context.Entry<Contact>(retrievedContact).CurrentValues.SetValues(userContact);
      context.SaveChanges());
    }

如果查看数据库,将创建联系人,新地址也是如此,但联系人上的AddressID为空,因此联系人与地址无关。 我不确定我做错了什么。

0 个答案:

没有答案