Asp.net mvc 带有实体框架的Asp.net mvc问题:创建或更新联系人地址。用Ajax请求填充地址
我有两个相关实体:联系人和地址。彼此之间有一种关系。1个联系人,1个地址 在create表单中,我填写FirstName和LastName文本框。我有一个与地址相关的字段 在某些情况下,我会执行AJAX请求来自动填充地址信息 问题是:当我单击save时,会创建一个新的地址条目,而不仅仅是将联系人与AJAX请求提供的AddressID相关联 理想的行为是,如果AddressID为空,则保存一个新的地址条目。如果AddressID不是空的,只需将其关联即可Asp.net mvc 带有实体框架的Asp.net mvc问题:创建或更新联系人地址。用Ajax请求填充地址,asp.net-mvc,ajax,entity-framework,asp.net-mvc-2,entity-framework-4,Asp.net Mvc,Ajax,Entity Framework,Asp.net Mvc 2,Entity Framework 4,我有两个相关实体:联系人和地址。彼此之间有一种关系。1个联系人,1个地址 在create表单中,我填写FirstName和LastName文本框。我有一个与地址相关的字段 在某些情况下,我会执行AJAX请求来自动填充地址信息 问题是:当我单击save时,会创建一个新的地址条目,而不仅仅是将联系人与AJAX请求提供的AddressID相关联 理想的行为是,如果AddressID为空,则保存一个新的地址条目。如果AddressID不是空的,只需将其关联即可 <%: Html.TextBoxFo
<%: Html.TextBoxFor(model => model.ContactInfo.FirstName)%>
<%: Html.TextBoxFor(model => model.ContactInfo.LastName)%>
<%:Html.TextBoxFor(model => model.ContactInfo.Address.AddressID)%>
<%:Html.TextBoxFor(model => model.ContactInfo.Address.City)%>
<%:Html.TextBoxFor(model => model.ContactInfo.Address.Street)%>
你是说:
ContactInfo.IsActive = true;
if (ContactInfo.HasValue)
{
ContactInfo.Address = _db.Addresses.Single(a => a.AddressID == ContactInfo.Address.AddressID);
}
_db.AddToContacts(ContactInfo);
_db.SaveChanges();
?
使用FK关联(可选),在EF 4中,您还可以执行以下操作:
ContactInfo.IsActive = true;
if (ContactInfo.HasValue)
{
ContactInfo.Address = null;
ContactInfo.AddressID = ContactInfo.Address.AddressID;
}
_db.AddToContacts(ContactInfo);
_db.SaveChanges();
@p、 坎贝尔:谢谢你的帮助。我的英语不是很好。谢谢,你能发布保存实体的代码吗?我使用FK和EF4。我关心的是,当我用ajax请求填充地址信息并按下Save按钮时,它会保存一个新条目,而不仅仅是用ajax响应关联AddressID。我理解。你试过我的建议了吗?谢谢,它起作用了。诀窍是当您不想保存新地址时,将地址设置为Null。
ContactInfo.IsActive = true;
if (ContactInfo.HasValue)
{
ContactInfo.Address = null;
ContactInfo.AddressID = ContactInfo.Address.AddressID;
}
_db.AddToContacts(ContactInfo);
_db.SaveChanges();