I have a mapping and POCOs as below. The problem is that tbFNamesFeature
is not being updated when this object is saved (whereas tblFeature
is)
I've tried different values for cascade
, to no effect, so I'd have to say there's something I don't get. (see ??? in the xml).
What am I doing wrong?
tbFNamesFeature
has 2 columns:
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>
Feature.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;
}
}
}
edited to reflect discussion: As tblFNamesFeature is a many-to-many table, the mapping needs to be set up with inverse="false" to indicate that other end the relationship is not responsible for saving the collection.
cascade="all" also needs to be set (which covers saves, updates, and deletes).