我有一个映射和POCO,如下所示。问题是保存此对象时tbFNamesFeature
没有更新(而tblFeature
是(我已经尝试了cascade
的不同值,但没有效果,所以我不得不说有些东西我不明白。(请参见xml中的??(
我做错了什么?
tbFNamesFeature
有两列:
FNamesId(PK,int,not null(
FeatureId(PK,int,not null
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Feature, Infrastructure.Interface"
table="tblFeature">
<id name="Id" type="Int32" unsaved-value="0">
<column name="FeatureId" sql-type="int" not-null="true" unique="true" index="PK_tblFeature" />
<generator class="native" />
</id>
<property name="Description" type="String">
<column name="Description" length="100" sql-type="varchar" not-null="false" />
</property>
<bag name="FNames" table="tbFNamesFeature" inverse="true" lazy="false" cascade="???">
<key>
<column name="FeatureId" sql-type="int" not-null="true" />
</key>
<many-to-many class="FName, Infrastructure.Interface">
<column name="FNamesId" sql-type="int" not-null="true" />
</many-to-many>
</bag>
</class>
</hibernate-mapping>
功能.cs
public partial class Feature : System.IComparable
{
protected int id;
protected string description;
public virtual int Id
{
get { return this.id; }
set { this.id = value; }
}
public virtual string Description
{
get { return this.description; }
set { this.description = value; }
}
}
Feature.part.cs
public partial class Feature : System.IComparable
{
private System.Collections.Generic.IList<FName> fnames;
public virtual System.Collections.Generic.IList<FName> FNames
{
get
{
if (this.fnames == null)
{
this.fnames = new System.Collections.Generic.List<FName>();
}
return this.fnames;
}
set {
this.fnames = value;
}
}
}
经过编辑以反映讨论:由于tblFNamesFeature是一个多对多表,因此需要使用inverse="false"设置映射,以表明关系的另一端不负责保存集合。
还需要设置cascade="all"(包括保存、更新和删除(。