請參見下面的類和映射。我想在某些情況下更新地址(此時,它始終是一個地址)。NHibernate:更新ISet集合
我這樣做:
var customer = session.Get<Customer>(customerId);
customer.Address.Clear();
customer.Address.Add(address);
地址從一個表單來的,id字段是不是= 0(0時,在創造,沒有問題)
,但是當我這樣做:
session.Save(customer);
session.Commit();
我收到異常的提交(14 CustomerAddress的id):
具有相同標識符值的不同對象已與該實體的會話相關聯:14,實體:CustomerAddress
更新此地址的方式是什麼?
感謝,
類和映射
public class Customer
{
public virtual int Id { get; set; }
public virtual string LastName { get; set; }
public virtual Iesi.Collections.Generic.ISet<CustomerAddress> Address { get; set; }
public Customer()
{
Address = new Iesi.Collections.Generic.HashedSet<CustomerAddress>();
}
}
public class CustomerAddress
{
public virtual int Id { get; set; }
public virtual string Street { get; set; }
public virtual Customer Customer { get; set; }
}
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.LastName)
.Length(50)
.Not.Nullable();
HasMany(x => x.Address)
.AsSet()
.Inverse()
.Cascade.AllDeleteOrphan()
.Not.LazyLoad();
}
}
public class CustomerAddressMap : ClassMap<CustomerAddress>
{
public CustomerAddressMap()
{
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Street).Length(50);
References(x => x.Customer);
}
}
我試過第二種解決方案。奇怪的是沒有更新,但插入。 'address'變量的id = 14,我有一個插入(而不是更新,然後是2個地址) – 2012-02-14 12:46:03
@ Kris-l感謝您指出我的代碼中的錯誤Session.Save()應該是Session.SaveOrUpdate ()。抱歉。 – acarasso 2012-02-17 02:56:04