У меня есть следующее сопоставление для двух таблиц, имеющих отношения «Много-ко-многим» между ними. Как удалить запись из таблицы сопоставления, которая является «ProjectUser» в моем случае?NHibernate - как удалить элемент из отношений «многие ко многим»?
public ProjectMap()
{
Id(x => x.Id);
Map(x => x.ProjectName);
Map(x => x.Description);
References<User>(x => x.Owner);
HasManyToMany(x => x.Users)
.Cascade.SaveUpdate()
.Table("ProjectUser")
.Not.LazyLoad();
}
public UserMap()
{
Id(x => x.Id);
Map(x => x.FirstName);
Map(x => x.LastName);
Map(x => x.UserName);
HasManyToMany(x => x.Projects)
.Cascade.SaveUpdate()
.Inverse()
.Table("ProjectUser")
.Not.LazyLoad();
}
EDIT: изменен Каскад в SaveUpdate, как предложено в ответах. Вот код, который я использую для передачи данных в базу данных SQLite.
using (var trans = session.BeginTransaction())
{
var existingUsers = project.Users.ToList();
foreach (var item in existingUsers)
{
if (selectedUsers.Count(x => x.Id == item.Id) == 0)
project.Users.RemoveAt(project.Users.IndexOf(item));
}
session.SaveOrUpdate(project); // This fixed the issue
session.Flush();
foreach (var item in selectedUsers)
{
if (project.Users.Count(x => x.Id == item.Id) == 0)
{
project.AddUser(session.Get<User>(item.Id));
}
}
session.SaveOrUpdate(project);
session.Flush();
trans.Commit();
}
// Add user code in Project class
public virtual void AddUser(User userToAdd)
{
if (this.Users == null)
this.Users = new List<User>();
userToAdd.Projects.Add(this);
this.Users.Add(userToAdd);
}
Всякий раз, когда я пытаюсь сохранить/обновить Я получаю следующее сообщение об ошибке:
a different object with the same identifier value was already associated with the session: 10, of entity: Models.Project
EDIT2: Следует использовать Session.saveOrUpdate (проект) и session.Flush(), чтобы избежать ошибок было указано выше ,
Это устранило проблему, и все, что мне нужно сделать, это сохранить и сфотографировать, прежде чем я удалю и добавлю еще один projectUser. – Raj