عند رسم الخرائط التلقائية لمجموعة مع nhibernate بطلاقة ، كيف تجعل المفتاح الخارجي للطفل للوالد لا لبس فيه؟
-
30-09-2019 - |
سؤال
إذا كان لدي فئة الوالدين:
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();
}
}