NHibernate العديد من العديد من علاقة المشكلة عند حذف جزء من العلاقة

StackOverflow https://stackoverflow.com/questions/1812573

سؤال

لدي العديد من العديد من علاقة بين فريق موظف الكيان.

أنا تعيين لهم على النحو التالي:

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 بدلا من ذلك, إذا كنت ترغب في تجنب حذف تتالي العمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top