我有一組來自,我想在NHibernate的使用一個TPC繼承了不同來源的支付對象。所有這些對象的基礎都是支付處理器(因此它們都具有一致的格式),但是在數據庫中沒有基類的表示。我想,我有我的映射制定出來的,不同的是我得到試圖插入時拋出的異常的事實 - 「不能使用標識列密鑰生成與<工會子>映射:<實體名稱>」表每有FluentNHibernate類繼承 - 身份生成
類:
public class BasePayment
{
public virtual int Id { get; set; }
public virtual PaymentSource Source { get; set; }
public virtual DateTime Date { get; set; }
public virtual decimal Amount { get; set; }
}
public class SubPayment : BasePayment
{
}
映射:
public class BasePaymentMap : ClassMap<BasePayment>
{
public BasePaymentMap()
{
UseUnionSubclassForInheritanceMapping();
DiscriminateSubClassesOnColumn("Source");
Id(m => m.Id);
Map(m => m.Source);
Map(m => m.Amount);
Map(m => m.Date);
}
}
public class SubPaymentMap : SubclassMap<SubPayment>
{
public SubPaymentMap()
{
DiscriminatorValue(PaymentSource.SourceX);
Abstract();
Table("SourceXPayments");
}
}
這就是據我已經得到了。在一個SaveOrUpdate,我收到上述錯誤,和谷歌搜索沒有證明有幫助迄今 - 我發現這樣一個問題:Cannot use identity column key generation with <union-subclass> (TABLE_PER_CLASS)這似乎覆蓋的Java/Hibernate的問題,但我有與轉換問題在@GeneratedValue(strategy = GenerationType.TABLE)
成流利的語法,流利的NHibernate的GeneratedBy()
方法似乎並不有一個表,或大量的文檔資料(我發現)爲在幕後它做什麼。
做了一些更多的閱讀周圍似乎這可能是不可能的,所以如果任何人都可以證實這一點或爲情況提供解決辦法,將不勝感激。
如果我沒有給予足夠的細節,請讓我知道什麼是更多的使用。
在此先感謝
感謝FIRO - 你已經證實了我在讀我張貼後。雖然我明白爲什麼它不會讓我這樣做,但從我的角度來看,這是一個煩惱,因爲這意味着我必須渾濁我的桌子或物體才能使它合適。我現在正在尋找不同的解決方案,但非常感謝,這回答了原來的問題。 –
@Ian你是怎麼解決這個問題的?我也不想在我的課堂上製造太多的東西。 –
@FrancoisBotha解決的辦法是踢'DiscriminateSubClassesOnColumn(「Source」);'並使用另一個Id生成器。 'GeneratedBy()。HighLow(maxLowValue)'將是我的\t建議,其中maxLowValue將介於100和10000之間 – Firo