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