NHibernate العديد من العديد من علاقة المشكلة عند حذف جزء من العلاقة
-
06-07-2019 - |
سؤال
لدي العديد من العديد من علاقة بين فريق موظف الكيان.
أنا تعيين لهم على النحو التالي:
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
// identifier mapping
Id(p => p.Id).Column("EmployeeID");
// column mapping
Map(p => p.EMail);
Map(p => p.LastName);
Map(p => p.FirstName);
// relationship mapping
HasManyToMany(m => m.Teams).Table("EmployeeTeam")
.Inverse()
.Cascade.All()
.AsSet()
.LazyLoad()
.ParentKeyColumn("EmployeeID")
.ChildKeyColumn("TeamID");
HasMany(p => p.LoanedItems).Cascade.SaveUpdate().KeyColumn("EmployeeId");
}
}
public class TeamMap : ClassMap<Team>
{
public TeamMap()
{
// identity mapping
Id(p => p.Id).Column("TeamID");
// column mapping
Map(p => p.Name);
// relationship mapping
HasManyToMany(m => m.Employees)
.Table("EmployeeTeam")
.LazyLoad()
.Cascade.All()
.AsSet()
.ParentKeyColumn("TeamID")
.ChildKeyColumn("EmployeeID");
}
}
ثم أنشأت 3 فرق و 2 من الموظفين:
TeamID EmployeeID
1 1
1 2
2 2
3 1
على Employee1 أيضا 2 LoanedItems(كتب, مجلات).Employee2 لا LoanedItems.
الآن أريد حذف Employee1 ، الذي هو في Team1 و Team3.في فريق 1 هو أيضا Employee2.حتى عندما حذف Employee1 أفترض أن Employee1 حذف و أيضا Team3 لأنني أيضا أن نفترض أن أي فريق يمكن أن توجد إلا عندما يكون لديه صاحب العمل والعكس بالعكس.حتى Team1 لا يجوز حذفه لأنه قد Employee2 و يمكن أن لا يزال موجودا.
أنا استخدم التعليمات البرمجية التالية خطوط مع جلسة جديدة:
var loadedEmployee = session.Get<Employee>(1);
session.Delete(loadedEmployee);
transaction.Commit();
ولكن ماذا يحدث ؟ -> NHibernate حذف جميع الفرق و جميع العاملين!-> NHibernate بتحديث LoanedItem الجدول بشكل صحيح من خلال وضع FK EmployeeID إلى NULL.
ما هو الخطأ هنا ؟
المحلول
لقد أجبت على سؤال مماثل هنا:ما هي الطريقة الصحيحة لتحديد عدة علاقات في NHibernate للسماح يحذف ولكن تجنب تكرار السجلات
قراءة السؤال و الجواب ربما سوف تساعدك على فهم ما يحدث مع كثير إلى كثير من الجمعيات.
نصائح أخرى
بسبب تتالي.كل على HasManyToMany رسم الخرائط.
استخدام سلسلة.SaveAndUpdate بدلا من ذلك, إذا كنت ترغب في تجنب حذف تتالي العمل.