1

我们正在从 EF4 迁移到 EF5,其中一部分是从 POCO 生成器创建的类迁移到 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 为空,因此联系人与地址没有关联。我不确定我做错了什么。

4

0 回答 0