عند رسم الخرائط التلقائية لمجموعة مع nhibernate بطلاقة ، كيف تجعل المفتاح الخارجي للطفل للوالد لا لبس فيه؟

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

سؤال

إذا كان لدي فئة الوالدين:

public class Parent
{
    public Parent()
    {
        Children = new List<Child>();
    }

    IList<Child> Children {get; private set;}
}

وفئة طفل مثل ذلك:

public class Child
{
     public SomeThirdClass Friend {get; set;}
}

كلما سمحت لسيارات Nhibernate بطلاقة ضرب هؤلاء الرجال ، فإن ذلك يجعل Child الطبقة لها مفتاح خارجي غير قابل للفرق. لقد غيرت بعض الاتفاقيات الآلية وبعض التجاوزات لبعض الفئات ، ولكن لهذا الزوج بالذات فقط Parent الفصل لديه تجاوز. لا يحدد التجاوز كيفية تعيين جزء المجموعة لـ Parent صف دراسي.

هل جعل مفتاحًا خارجيًا غير قابل للتفتيش في طفل مجموعة من السلوك الافتراضي ، أم أنني قد تسببت في شيء؟

كيف يمكن للمرء أن يحدد في فئة التجاوز في رسم الخرائط أن المفتاح الخارجي للطفل غير قابل للارتداء؟

سلام!

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

المحلول 2

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

لا أستطيع أن أقول إنني أفهم تمامًا الخطأ الذي حدث ، لذا ينصح الحذر عند اتباع حلي. لكن يمكنني القول أن الجمع بين التعيينات والسيارات بطلاقة يزيد بالتأكيد من تعقيد قضايا استمرار تصحيح الأخطاء.

حل بديل: صادفت هذه المشكلة مرة أخرى مرتين أخريين ، ولاحظت ذلك إذا اتصلت KeyColumn(string columnName) في ال IAutoMappingOverride بالنسبة للوالد ، فإن المفتاح الخارجي في فئة الطفل سوف يتخلف عن السداد ، بدلاً من عدم الفرق. مجنون هاه؟

نصائح أخرى

هل جربت هذا:

   public class ChildMap : IAutoMappingOverride<Child>
   {
       public void Override(AutoMapping<Child> mapping)
       {
           mapping.References(x => x.OtherThing)
               .Nullable();
       }
   }

إذا كنت تريد أن تجعله افتراضيًا لجميع المفاتيح الخارجية ، فيمكنك استخدام هذا:

   public class NullableFKConvention : IReferenceConvention
   {
       public void Apply(IManyToOneInstance instance)
       {
           instance.Nullable();
       }
   }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top