我们正在从 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 为空,因此联系人与地址没有关联。我不确定我做错了什么。