首先,我有如下表:功能NHibernate - 保存實體與複合鍵
CREATE TABLE CustomerHub (
CustomerId INT NOT NULL,
HubId INT NOT NULL
)
,我有映射到該實體:
public class CustomerHub
{
public int CustomerId {get;set;}
public int HubId {get;set}
//GetHashCode, Equals, Etc...
}
使用這個映射:
public class CustomerHubMap : ClassMap<CustomerHub>
{
UseCompositeId()
.WithKeyProperty(x => x.CustomerId)
.WithKeyProperty(x => x.HubId);
}
我遇到的問題是,當我創建一個類型爲CustomerHub的新實體並嘗試保存它時,沒有任何東西被持久化到數據庫。我能夠檢索一切正常,只是不保存它們。例如:
//this will work
var x = session.CreateCriteria(typeof(CustomerHub));
//this will not
using (var trans = session.BeginTransaction())
{
var custHub = new CustomerHub {CustomerId = 293, HubId = 1193};
var y = session.SaveOrUpdate(custHub);
trans.Commit();
}
奇怪的是沒有任何異常被拋出,它只是沒有做任何事情。我啓動了NH Profiler(優秀的工具!),看起來它不會向數據庫發佈任何類型的插入命令。
想法?
注意:我知道這個表看起來很像聯接表(因爲它在技術上是),並且最好在另一個實體(如Customer)上擔當ManyToMany關係......但由於某些極其棘手的數據設計(即沒有Hub表),將連接表映射到一個實體並且以這種方式使用它是非常簡單的。
感謝您的快速回答。爲了簡潔起見,我把它放在了外面,但我把所有的呼叫放在一個與第二個例子非常相似的代碼中。我也試過沖洗沒有運氣。 – jckeyes 2009-07-27 19:19:08