是否可以說:NHibernate的
var user = session.Get<IUser>(1);
如果IUSER是一個接口,並呼籲用戶的implentation。 User類映射到Users表,我希望在NHibernate中執行Get/Query時使用它作爲默認類型。
我會很感激的幫助。
是否可以說:NHibernate的
var user = session.Get<IUser>(1);
如果IUSER是一個接口,並呼籲用戶的implentation。 User類映射到Users表,我希望在NHibernate中執行Get/Query時使用它作爲默認類型。
我會很感激的幫助。
簡短的回答是否定的。 NHibernate要求你映射和指定具體的類。
有一個漫長而雜亂的答案,涉及到連接子類映射,這種類型的工作,因爲它允許你映射一個接口類型,然後映射所有實現該接口的具體類型,這個類型可以被持久化, t真的給你你想要的東西,這是能夠將接口屬性映射到數據庫,然後使用指定的默認類型獲取/保存任何滿足接口的舊實體。
你可以寫某種包裝的周圍ISession
,將讓你做你想要的東西 - 即轉化爲wrapper.Get<IUser>(id)
任何調用session.Get<User>(id)
,但隨後你會基本上只搭售IUser
到作爲一個別名User
這真的首先違背了使用界面的全部原因。 (另外:如果你只是爲了IoC的目的而使用接口,例如,在'正常'操作中,IUser和具體類型之間會有一對一的映射關係,例如,用於測試目的的嘲笑用戶,那麼你可以做的是把NHibernate包裝在一個知識庫中,知道如何與你的IoC解決方案對話以獲得具體類型,然後採取相應的行動。 ,但它有點混亂。)
謝謝,這是我期待的答案,但仍然很高興聽到別人說出來。它看起來像重構的高級是爲了。 – nfplee