لم يتم تحديث nhibernate للعديد من الجدول
-
22-09-2019 - |
سؤال
لدي 3 جداول هي "أخبار" ، "علامات" ، "news_tags" مع الكثير للكثيرين صلة.
مع التعيين التالي تم تحديث جدول "الأخبار" و "العلامات" "news_tags" لم يتم تحديثه.
هل يستطيع أي أحد مساعدتي؟
أخبار:
<class name="News" table="News" lazy="false">
<id name="NewsID">
<generator class="identity" />
</id>
<property name="Title"/>
<set
name="TagsList"
table="News_Tags"
inverse="true"
lazy="false"
cascade="save-update">
<key column="NewsID" not-null="true" />
<many-to-many class="Tag" column="TagID" />
</set>
</class>
العلامات:
<class name="Tag" table="Tags" lazy="false">
<id name="TagID">
<generator class="identity" />
</id>
<property name="TagName"/>
<property name="DateCreated"/>
<set
name="NewsList"
table="News_Tags"
inverse="true"
lazy="false"
cascade="save-update">
<key column="TagID" not-null="true" />
<many-to-many class="News" column="NewsID" />
</set>
</class>
news_tags
<class name="NewsTags" table="News_Tags" lazy="false">
<id name="NewsTagID">
<generator class="identity" />
</id>
<property name="TagID"/>
<property name="NewsID"/>
</class>
شكرا جزيلا
طن.
المحلول
هناك بعض الأشياء الغريبة في هذا الخرائط.
- كلتا المجموعتين ،
TagsList
وNewsList
, ، عكسية. لذلك nhibernate لا يخزنهم. العكسي يعني: "هذه المعلومات موجودة بالفعل في مجموعة أخرى ، لذا تجاهل هذا عند التخزين". ضع عكسًا على جانب واحد فقط من العلاقة ثنائية الاتجاه. NewsTags
يتم تعيينه كفئة ، حتى لو لم يكن فئة. إنه مجرد جدول في قاعدة البيانات ، ويستخدم لرسم خريطة (ثنائية الاتجاه) علاقة كثيرة. فقط قم بإزالة رسم خرائط الفئة هذا.- يتم تعيين سلسلة من قبل كلتا المجموعتين. لست متأكدًا مما إذا كنت تريد إنشاء علامات جديدة إذا تمت الإشارة إليها بواسطة أ
News
مثال ، لكنك على الأرجح لا تريد إنشاء جديدNews
مثيلات لأنها تشير إليها بعض العلامات. أود إزالته هناك.
نصائح أخرى
وأنا أتفق مع STEFAN ، وسائل التعيينات الخاصة بك ليست صحيحة. إذا فهمت بشكل صحيح أن هناك علاقة كثيرة بين الأخبار والعلامات ، فإن News_Tags هي جدول التقاطع/الانضمام الخاص بك في هذه الحالة لا يجب عليك تقديم ملف رسم الخرائط.
يجب أن تعتني ملفات التعيين الخاصة بك للأخبار والعلامات في جدول التقاطع/الانضمام دون الاضطرار إلى تعيينه. ضع في اعتبارك التعيينات التي أمتلكها بين المستخدم والدور الذي هو كثير إلى كثير ، نأمل أن يوفر هذا بعض التوجيهات.
رسم خرائط المستخدم
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false">
<class name="BM.BEAST.Core.Common.User, BM.BEAST.Core" table="[User]" lazy="false">
<id name="ObjId" column="ObjId" type="Guid">
<generator class="guid"/>
</id>
<property name="UserName" column="UserName" type="String" not-null="true"/>
<property name="FirstName" column="FirstName" type="String" not-null="true"/>
<property name="LastName" column="LastName" type="String" not-null="true"/>
<property name="Initials" column="Initials" type="String" not-null="true"/>
<property name="LastLoginDtm" column="LastLoginDtm" type="Timestamp"/>
<property name="Disabled" column="Disabled" type="Boolean"/>
<property name="OnLine" column="OnLine" type="Boolean"/>
<bag name="Roles" table="UserRole" lazy="true">
<key column="UserObjId"/>
<many-to-many class="BM.BEAST.Core.Common.Role, BM.BEAST.Core" column="RoleObjId"/>
</bag>
<bag name="Sessions" table="Session" lazy="true" cascade="all-delete-orphan">
<key column="ActiveUser"/>
<one-to-many class="BM.BEAST.Core.Common.Session, BM.BEAST.Core" not- found="ignore"/>
</bag>
</class>
رسم الخرائط
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false">
<class name="BM.BEAST.Core.Common.Role, BM.BEAST.Core" table="[Role]" lazy="false">
<id name="ObjId" column="ObjId" type="Guid">
<generator class="guid"/>
</id>
<property name="Code" column="Code" type="String" not-null="true"/>
<property name="Name" column="Name" type="String" not-null="true"/>
<property name="Sequence" column="Sequence" type="Int16" not-null="true"/>
</class>
</hibernate-mapping>