我想“扩展”我的域类而不必将数据添加到域类本身。你看我有下面的类: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