2011-06-14 54 views
1

“XXX的一个实例的标识是从X到Y改变的”我使用ASP.NET MVC与NHibernate的UpdateModel + NHibernateException

public class User 
{ 
    public virtual int Id { get; set; } 

    public virtual string Name { get; set; } 

    public virtual Country Country { get; set; } 
} 

public class Country 
{ 
    public virtual int Id { get; set; } 

    public virtual string Name { get; set; } 
} 

我有一个页面编辑用户, 存在dropdownlist来选择国家

我使用UpdateModel()更新用户。 它适用于User.Name。 它更新User.Country.Id,但不是User.Country.Name (因为该页面只发送Country.Id)。所以我使用这个:User.Country = countryDao.Get(User.Country.Id) 但当我保存用户时,我有一个NHibernateException:{“国家实例的标识符从1更改为2”}

我该怎么办?

+0

如果你想保存设置级联更新关于引用的实体的变化。将国家/地区ID设置为私人设置;并看看它是否编译。 – 2011-06-14 22:14:38

回答

1

错误:

 var db = new BaseServices<Supplier>(); 
     Supplier item = db.Get(model.SupplierID); 

     **TryUpdateModel(item); 
     item.Locality = new BaseServices<Locality>().Get(model.Locality.LocalityID);**   
     db.Update(item); 
     db.SaveChange(); 

Slution:

 var db = new BaseServices<Supplier>(); 
     Supplier item = db.Get(model.SupplierID); 

     item.Locality = new BaseServices<Locality>().Get(model.Locality.LocalityID); 
     TryUpdateModel(item); 
     db.Update(item); 
     db.SaveChange();