Tôi hiện đang sử dụng NHibernate làm lớp truy cập dữ liệu của mình, sử dụng Fluent NHibernate để tạo các tệp ánh xạ cho tôi. Tôi có hai lớp, TripItem và TripItemAttributeValue, có mối quan hệ nhiều-nhiều giữa chúng.NHibernate không bền bỉ mối quan hệ nhiều-nhiều-
Các bản đồ như sau:
public class TripItemMap : ClassMap<TripItem2>
{
public TripItemMap()
{
WithTable("TripItemsInt");
NotLazyLoaded();
Id(x => x.ID).GeneratedBy.Identity().WithUnsavedValue(0);
Map(x => x.CreateDate, "CreatedOn").CanNotBeNull();
Map(x => x.ModifyDate, "LastModified").CanNotBeNull();
/* snip */
HasManyToMany<TripItemAttributeValue>(x => x.Attributes).AsBag()
.WithTableName("TripItems_TripItemAttributeValues_Link")
.WithParentKeyColumn("TripItemId")
.WithChildKeyColumn("TripItemAttributeValueId")
.LazyLoad();
}
}
public class TripItemAttributeValueMap : ClassMap<TripItemAttributeValue>
{
public TripItemAttributeValueMap()
{
WithTable("TripItemAttributeValues");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name).CanNotBeNull();
HasManyToMany<TripItem2>(x => x.TripItems).AsBag()
.WithTableName("TripItems_TripItemAttributeValues_Link")
.WithParentKeyColumn("TripItemAttributeValueId")
.WithChildKeyColumn("TripItemId")
.LazyLoad();
}
}
Tại một số điểm trong ứng dụng của tôi, tôi lấy thuộc tính hiện tại từ cơ sở dữ liệu, thêm chúng vào tripItem.Attributes, sau đó lưu các đối tượng tripItem. Cuối cùng, TripItems_TripItemAttributeValues_Link không bao giờ nhận được bất kỳ bản ghi mới nào, dẫn đến các mối quan hệ không được duy trì.
Nếu nó giúp, đây là các file ánh xạ được tạo ra bởi thành thạo NHibernate cho các lớp này:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true" assembly="ETP.Core" namespace="ETP.Core.Domain">
<class name="TripItem2" table="TripItemsInt" xmlns="urn:nhibernate-mapping-2.2" lazy="false">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="identity" />
</id>
<property name="CreateDate" column="CreatedOn" type="DateTime" not-null="true">
<column name="CreatedOn" />
</property>
<property name="ModifyDate" column="LastModified" type="DateTime" not-null="true">
<column name="LastModified" />
</property>
<bag name="Attributes" lazy="true" table="TripItems_TripItemAttributeValues_Link">
<key column="TripItemId" />
<many-to-many column="TripItemAttributeValueId" class="ETP.Core.Domain.TripItemAttributeValue, ETP.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
</class>
</hibernate-mapping>
và
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true" assembly="ETP.Core" namespace="ETP.Core.Domain">
<class name="TripItemAttributeValue" table="TripItemAttributeValues" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" column="Id" type="Int32">
<generator class="identity" />
</id>
<property name="Name" column="Name" length="100" type="String" not-null="true">
<column name="Name" />
</property>
<bag name="TripItems" lazy="true" table="TripItems_TripItemAttributeValues_Link">
<key column="TripItemAttributeValueId" />
<many-to-many column="TripItemId" class="ETP.Core.Domain.TripItem2, ETP.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
</class>
</hibernate-mapping>
Tôi đang làm gì sai ở đây?
Cùng một thỏa thuận đối với tôi - xếp chồng không phải là điều tôi muốn và điều đó không giúp ích gì. Đỏ mặt là câu trả lời! –