親テーブルと子テーブルがあり、エンティティは 1 対多のリレーションシップを使用して作成およびマップされます。Inverse() を使用すると、1 対多の側で、子テーブルの外部キー値が null として挿入されます。
public class TableA
{
public virtual long ID { get; set; }
public virtual string Name { get; set; }
public virtual IList<TableB> TableB { get; set; }
}
public class TableB
{
public virtual long ID { get; set; }
public virtual string Name { get; set; }
public virtual TableA TableA { get; set; }
}
public class TableAMap : ClassMap<TableA>
{
public TableAMap()
{
Id(x=>x.ID);
Map(x=>x.Name).Column("Name");
HasMany(x=>x.TableB)
.KeyColumn("TableA_ID")
.Inverse()
.Cascase.All()
.Not.LazyLoad();
}
}
public class TableBMap : ClassMap<TableB>
{
public TableBMap()
{
Id(x=>x.ID);
Map(x=>x.Name).Column("Name");
References(x=>x.TableA).Column("TableA_ID").Not.LazyLoad();
}
}
注多からInverse()
1 に削除すると、新しいレコードは問題なく挿入され、外部キーは問題なく挿入されますが、レコードを更新すると、既存のレコードの外部キーが null として置き換えられます。
同様の質問を調べましたが、役に立ちません。