我想「擴展」我的域類而不必將數據添加到域類本身。你看我有下面的類:NHibernate映射域「擴展屬性」?
public class Person
{
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
}
而且我在數據庫如下表:
tblPersons
---------------
Id integer
Name varchar(50)
CreatedBy varchar(50)
CreatedDate datetime
所以我不想「CreatedBy」和「CreatedDate」添加到我的領域類,因爲這與實際域本身無關......
每當我加載一個實體時能得到這個數據嗎?我想用這樣的:
Person person = session.Load<Person>(1);
person.CreatedBy(); <-- CreatedBy is an Extension function
person.CreatedDate(); <-- CreatedDate is an Extension function
任何人都可以點我在哪個方向,以實現該走?
我曾想過以下可能性:
實現自定義ProxyFactory裏,在那裏我注入定製的「接口」,如IUpdateable,howver好像NHibernate的不創建代理始終如一,有時它加載了我的「代理類」級,有時它加載「正常班」:
Person person = session.Load<Person>(2); //this will load my Proxy class of Person just fine Address address = person.Address; //Somehow this doesn't load a Proxy for Address, but instead loads it normally - seems like it's evaluating "ImmediateLoad", which doesn't load proxies, due to lazy loading... not sure how to make this behave as I want.
使用自定義PropertyAccessor接口。我已閱讀了關於此的一些信息 - 但似乎我必須實際將其映射到域類上的EXITS屬性......所以這樣做不行,對吧?就像NHibernate在創建代理類時向運行時「注入」代碼一樣 - 也許我可以做同樣的事情,但是將「接口」注入原始Person類呢?
當您不使用NHiberante時,擴展方法如何工作? – Paco 2010-08-01 12:11:57
好吧,我使用NHibernate作爲主題的含義。我已經使用「NHibernate Fluent」映射Person.Name屬性以匹配數據庫中的tblPersons.Name。 它不是c#的「擴展函數」,這是我的問題...這是我如何添加映射的NHibernate的Person類加載的CreatedDate/CreatedBy,但把這些值在一些外部結構或東西......是我不知道如何解決的。 謝謝, – Bilsa 2010-08-01 12:25:34
沒有NHiberante就無法完成,NHibernate無法完成。 – Paco 2010-08-01 20:09:08