2
我有一個接口(IContactable),由3類實現的COORECT類型來過濾數據的基礎上:個人,部門,RestUnit的NHibernate不會對元數據
public interface IContactable
{
Contact Contact { get; set; }
string Title { get; }
int? Id { get; set; }
}
public class Person:IContactable
public class Department:IContactable
public class RestUnit:IContactable
還有另一個類,聯繫,這應該維護這些對象中的哪一個是聯繫實體的所有者。
聯繫映射其做這項工作的一部分是:
ReferencesAny(p => p.Contactable)
.EntityTypeColumn("ContactableType")
.EntityIdentifierColumn("ContactableId")
.IdentityType<int>()
.AddMetaValue<Person>("Person")
.AddMetaValue<Department>("Department")
.AddMetaValue<RestUnit>("RestUnit");
所以在數據庫聯繫人記錄會像(類型被保存爲字符串):
X Y ContactableType ContactableId
... ... Person 123
... ... Person 124
... ... Department 59879
... ... RestUnit 65
... ... Person 3333
... ... Department 35564
一切工作就好了但是過濾數據。當我想要得到一些特別的聯繫,說有部類型,我會寫這樣的:
var contacts = Repository<Contact>.Find(p=>p is Department);
NHibernate的嘗試基於ContactableType場的整數值,但ContactableType列過濾數據類型爲nvarchar
生成的查詢通過NHibernate的:
select .......... from contact.[Contact] where ContactableType=1
預計查詢:
select .......... from contact.[Contact] where ContactableType='Department'
所以NHibernate有點用錯了類型。 int而不是字符串。
我覺得NH是使用對象的索引列表,其AddMetaValue(「部」)增加了部門類型分爲...
我希望解釋就足夠
我用NH3明確...
有什麼想法嗎?
非常有趣的問題。你有沒有解決這個問題? – 2012-01-16 14:49:59
不幸的是,很遺憾無法找到解決辦法 – 2012-01-18 10:50:08