具有实体框架问题的Asp.net mvc:创建或更新联系人的地址。地址填写Ajax请求

时间:2010-09-17 00:23:44

标签: asp.net-mvc ajax entity-framework asp.net-mvc-2 entity-framework-4

我有2个相关实体:ContactAddress。彼此之间存在关系。 1联系1地址。

在创建表单中,我填充FirstName和LastName文本框。我有一个与地址相关的字段。

在某些情况下,我执行AJAX请求以自动填充地址信息。

问题是:当我单击“保存”时,会创建一个新的“地址”条目,而不是仅仅将联系人与AJAX请求提供的AddressID相关联。

所需的行为是,如果AddressID为空,请保存新的地址条目。如果AddressID不为空,只需将其关联即可。

<%: 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)%>    

如何做到这一点?


这是我保存实体

的时候
public ActionResult Create(Contact ContactInfo){
    try
    {  
        ContactInfo.IsActive = true;
        _db.AddToContacts(ContactInfo);
        _db.SaveChanges();
    }
}

1 个答案:

答案 0 :(得分:0)

你的意思是:

    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();