NHibernate رسم الخرائط بطلاقة - الكائن إنقاذ الطفل

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

  •  22-07-2019
  •  | 
  •  

سؤال

وأواجه مشكلة مع تعيينات يجيد NHibernate، كما أعتقد، ولا يمكن الحصول على جدا الماضي كيف يجب وضع الخرائط لتجنب هذه القضية.

ولدي الكائن الأعمال (حرفيا، "العمل")، وكائن الاستعراض. كل الأعمال يمكن أن يكون مراجعات متعددة التي تم إنشاؤها على صفحة في واجهة المستخدم. العمل هو خاصية الاستعراض، على النحو التالي:

public class Business 
{
    public virtual int BusinessId {get;set;}
    public virtual DateTime LastModified {get;set;}
    public virtual IList<Review> Reviews {get;set;}

    [... more removed for brevity ...]

}

public class Review
{
    public virtual int ReviewId {get;set;}
    public virtual string ReviewText {get;set;}
    public virtual Business Business {get;set;}

    [... more removed for brevity ...]

}

وبلدي تعيينات هي كما يلي:

public class ReviewMap : ClassMap<Review>
{
    public ReviewMap()
    {
        WithTable("Reviews");
        Id(x => x.ReviewId).TheColumnNameIs("ReviewId").GeneratedBy.Identity();

        References(x => x.Business).TheColumnNameIs("BusinessId");

        Map(x => x.ReviewText);

       [... and so on...]
}


public class BusinessMap : ClassMap<Business>
{
    public BusinessMap()
    {
        WithTable("Businesses");

        Id(x => x.BusinessId).TheColumnNameIs("BusinessId").GeneratedBy.Identity();

        Map(x => x.Name).TheColumnNameIs("BusinessName");
        Map(x => x.LastModified, "LastModifiedOn");

        HasMany<Review>(x => x.Reviews)
            .Inverse()
            .LazyLoad();

        [... more removed for brevity ...]

    }
}

والرمز مستودع هو

public void Save(T entity)
    {
        using (ISession session = GetSession())
        using (ITransaction tx = session.BeginTransaction())
        {
            session.SaveOrUpdate(entity);
            tx.Commit();
        }
    }

في رمز، وتعيين خصائص الكائن مراجعة، وندعو حفظ طريقة مستودع ل.

والمشكلة هي أن لأنني لست استكمال الأعمال في حد ذاتها، لا أتوقع ذلك للحصول على حفظها - كل ما أريده هو استعراض المحفوظة. لكن رمز يحاول إنقاذ الأعمال أيضا، وأحصل على excption، وأنا لم تعيين "LastModified" الملكية - كما لا أريد أن، وأنا إنقاذ استعراض، وليس الأعمال

وكيف يجب أن يتم إعداد الخرائط لندع هذا يحدث؟

هل كانت مفيدة؟

المحلول 2

وطيب، لذلك كانت المشكلة هذا: لم يتم تعيين الخاصية الأعمال في LastModified فعلا في كائن العمل الفعلي، كما سمحت قاعدة بيانات فارغة لهذا العقار

وماذا كان ذلك يعني انه عندما حاولت إنقاذ الاستعراض، حاولت أيضا لإنقاذ الأعمال - على الأرجح لأنه اعترف بأن كائن قاعدة البيانات ليس له قيمة (خالية) لLastModified، ولكن افتراضيا، منذ LastModified هو والتاريخ والوقت، وكانت قيمته DateTime.MinValue.

وبمجرد أن تحديث جدول الأعمال في قاعدة البيانات بحيث LastModified الآن NOT NULL، وأنها تعمل.

والجزء المؤسف من ذلك هو أن البيانات كنت أعمل مع صلت الى هذه الدولة دون هذا كونها قضية.

نصائح أخرى

ويمكن أن تكون هذه المسألة المقبلة للشرطا أساسيا رنجيفا بين الأعمال والاستعراض. الأعمال (الأم) تحتاج عادة ليتم حفظها قبل الاستعراض (طفل) يمكن أن يكون.

هل يمكن أن تشمل تعيين كائن الأعمال الخاصة بك إذا كان هذا لا يساعد؟

وكما لا أستطيع التعليق حتى الآن، وسوف الرد هنا.

إذا لم ترغب العمود LastModified أن تكون قيم الفارغة، الخاصية المناظرة كان ينبغي أن يكون DateTime? بدلا من DateTime عادي.

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