سؤال

تبحث عن إجابة حول كيفية تكوين NHibernate على دعم السيناريو, كثير إلى كثير من الخريطة مع جسم العلاقة.

عندي كوكتيلات من شخص:s مع العلاقات إلى شخص آخر:ق.كل من العلاقات سمة تحديد ما هو نوع العلاقة التي لديهم.في RDB ويتم ذلك باستخدام عدة الجدول مع العلاقة النوع المحدد في الجدول نموذج ثم يمكن تمديدها من خلال السماح أكثر أنواع مثل"قريب-صديق" و "العدو اللدود".

وأود أن تكون قادرة إما إلى الاستعلام شخص يعترض على عودة جميع ذوي العلاقة من نوع

<IList>Person myEnemies =  myPerson.getRelatedPersons(relationType.Enemy)

أو

<IList>Person myFriends = myPerson.getRelatedPersons(relationType.Friend)

أخرى (أقل الموسعة) حل ثابت في الدرجة تحديد العلاقات الأخرى موجودة:

public class Person   
{   
  public virtual int Id { get; private set; }   
  public virtual string FirstName { get; set; }   
  public virtual string LastName { get; set; }   
  public virtual IList<Person> Friends { get; set; }   
  public virtual IList<Person> Enemies { get; set; }   
}

الآن أنا لديك لاستخدام إرثا قاعدة البيانات مع "شخص" الجدول فضلا عن "PersonPerson" الجدول.إن "PersonPerson" الجدول يحمل العلاقة نوع عدد صحيح.

لقد كنت تحاول أن تفعل هذا باستخدام بناء الجملة مثل أدناه دون نجاح هذا بكثير...

// How to specify type=1  here?
HasManyToMany(x => x.Friends).WithTableName("Person_Person"); 

// How to specify type=2  here?
HasManyToMany(x => x.Enemies).WithTableName("Person_Person"); 

أي نصائح/حل تعيين هذا مع (بطلاقة) NHibernate?

BR

/ينس

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

المحلول

المثال الأول تتحدث يبدو أنك تحتاج إلى التحقيق في الميراث رسم الخرائط ، ولكن لست متأكدا كيف سيكون العمل مع جدول إضافي المعنية.

المثال الثاني عليك أن تكون قادرا على استخدام جملة Where.

HasManyToMany(x => x.Friends)
  .WithTableName("Person_Person")
  .Where("type = 2");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top