سؤال

وأنا أحاول لتنفيذ وراثة فئة hieararchy مع NHibernate والخادم SQL. أنا جعلت من العمل بشكل جيد مع الجدول في استراتيجية التسلسل الهرمي (طاولة واحدة وعدة عناصر فرعية في ملف التعيين).

و(عناصر N + 1 الجداول وN-انضمت فرعية في ملف تعيين واحد) ولكن الجدول في استراتيجية فرعية أكثر منطقية في حالتي لأنني أريد أن وضع بعض القيود على الجداول فئة فرعية. أنا أعاني مع أي نوع من جمعية PK / FK أود أن وضعت على الطاولة ماستر (الأشخاص) والجدول فرعية (ContactPersons). استنادا إلى وثائق NHibernate، يجب أن يكون هناك ارتباط المفتاح الأساسي بين الجداول. حاولت وضع القيد FK من PK فرعية إلى PK فئة رئيسية لكنه ما زال لا يعمل. أحصل على استثناء التالية:

وNHibernate.Exceptions.GenericADOException: لا يمكن إدراج: [Jobflow.Models.Entities.ContactPerson] [SQL: INSERT INTO ContactPersons (البريد الإلكتروني، والشركة، PersonID) VALUES (،،؟؟؟)] ---> النظام. Data.SqlClient.SqlException: لا يمكن إدراج القيمة صريحة للعمود هوية في الجدول 'ContactPersons' عندما يتم تعيين IDENTITY_INSERT إلى OFF

.

وأنا لم محاولة تعيين IDENTITY_INSERT إلى ON ولكن هذا لا يبدو لمساعدة ...

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

المحلول

وتحتاج إلى إعلان العمود بالأشخاص كما الهوية كثافة العمليات، ولكن في ContactPersons مجرد كثافة العمليات - جدول واحد فقط يحتاج إلى تتبع قيمة الهوية. مفاتيح خارجية الخاص بك / المفاتيح الأساسية على ما يرام، هذه هي القضية الوحيدة التي تحتاج إلى معالجة.

وNHibernate سوف تضاف الى بالأشخاص، والحصول على قيمة هوية جديدة باستخدام SCOPE_IDENTITY ()، ومن ثم استخدام هذه القيمة بشكل واضح للإدراج في ContactPersons.

نصائح أخرى

وأنا خلق المخطط مع SchemaExport NH ل. يخلق المفتاح الخارجي على مفتاح أساسي فرعية:

alter table ContactPersons 
add constraint FK81E543E94B3FF9C3 
foreign key (Persons_FK) 
references Persons

وأعلن Persons_FK في ملف التعيين

<joined-subclass name="ContactPersons">
  <key column="Persons_FK"/>
  ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top