我使用最新的流利NHibernate庫(0.1.0.452),我有一個問題,保存子女實體。流利的NHibernate的HasMany不更新FK
我認爲這是相當常見的場景...我已經得到了與映射父:
HasMany<Packet>(x => x.Packets)
.Cascade.All()
.KeyColumnNames.Add("OrderId");
和一個簡單的包類(領域模型和FNH映射)沒有任何參考父母。 生成的內容是包含名爲OrderId的列的正確數據包表。 沒有用的是保存。 每當我嘗試保存父對象時,孩子也被保存,但FK保持不動。 我檢查了SQL,並在INSERT語句中OrderId甚至沒有出現!
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映射類)的引用。
任何想法爲什麼OrderId沒有被插入?
編輯:忘記提及:如果它很重要,我使用MySQL5。
編輯2:上面的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 2009-04-22 00:10:31