最新のFluent NHibernateライブラリ(0.1.0.452)を使用しています。子エンティティを保存する際に問題があります。Fluent NHibernate HasManyがFKを更新していない
私は、これはかなり一般的なシナリオだと思う...私はマッピングを持つ親を持っている:
HasMany<Packet>(x => x.Packets)
.Cascade.All()
.KeyColumnNames.Add("OrderId");
と単純なパケットクラス(ドメインモデルとFNHマッピングで)いずれかを持っていないこと親への参照。 生成されるのは、OrderIdという名前の列を含む正しいPacketsテーブルです。 保存しないと動作しません。 親オブジェクトを保存しようとすると、子も保存されますが、FKはそのまま残ります。 OrderIdが表示されないSQLとINSERT文をチェックしました!
INSERT INTO KolporterOrders (CargoDescription, SendDate, [more cols omitted]) VALUES ('order no. 49', '2009-04-22 00:57:44', [more values omitted])
SELECT LAST_INSERT_ID()
INSERT INTO Packets (Weight, Width, Height, Depth) VALUES ('To5Kg', 1, 1, 1)
SELECT LAST_INSERT_ID()
ご覧のとおり、OrderIdは最後のINSERTには完全にありません。
私はまた、生成されたNHマッピングをチェックし、それは大丈夫だそうです:
<bag name="Packets" cascade="all">
<key column="OrderId" />
<one-to-many class="Company.Product.Core.Packet, Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
私は異なる値にカスケードを設定してみました。 PacketMap(FNHマッピングクラス)にReferencesを追加しました。
OrderIdが挿入されていない理由はありますか?
編集:忘れてしまったこと:私は重要な場合はMySQL5を使用しています。
Edit2:上記のFNHマッピングは、バッグ(セットではない)でhbmを生成します - 私はそれを編集しました。節約のために使用さ C#コード:
var order = new Order();
NHSession.Current.SaveOrUpdate(order); //yes, order.Packets.Count == 1 here
///Order.cs, Order ctor
public Order()
{
CreateDate = DateTime.Now;
OrderState = KolporterOrderState.New;
Packets = new List<Packet>();
Packets.Add(new Packet()
{
Depth = 1,
Height = 1,
Width = 1,
Weight = PacketWeight.To5Kg
});
}
セッションがフラッシュさとEndRequestので閉じます。
オブジェクトの作成と保存を行うC#コード(失敗したコード)を表示してください。 – yfeldblum