См. Ниже приведенный ниже класс и карту. Я бы хотел, в некоторых случаях, обновить адрес (в это время все время один адрес).NHibernate: обновить коллекцию ISet
Я делаю это:
var customer = session.Get<Customer>(customerId);
customer.Address.Clear();
customer.Address.Add(address);
адрес исходит из формы, поле идентификатор не = 0 (при 0, при создании, нет проблем)
, но когда я делаю это:
session.Save(customer);
session.Commit();
получаю исключение на фиксации (14 идентификатор CustomerAddress):
другой объект с тем же значением идентификатора уже был связан с сеансом: 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 адреса) –
@ Kris-l Спасибо за указание на ошибку в моем коде Session.Save() должен быть Session.SaveOrUpdate(). Сожалею. – acarasso