【发布时间】:2010-08-01 11:08:13
【问题描述】:
我想“扩展”我的域类,而不必向域类本身添加数据。考虑我有以下课程:
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,但是 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。我已经读过一些关于这个的东西 - 但似乎我实际上必须将它映射到一个在域类上退出的属性......这样就行不通了,对吧?
就像 NHibernate 在创建 Proxy 类时向运行时“注入”代码一样 - 也许我也可以这样做,但将“接口”注入到原始 Person 类中?
【问题讨论】:
-
不使用 NHiberante 时,扩展方法如何工作?
-
好吧,正如主题所暗示的那样,我确实使用 NHibernate。我已经用“NHibernate Fluent”映射了 Person.Name 属性,以匹配数据库中的 tblPersons.Name。对我来说,这不是 c# “扩展函数”的问题......这是我如何添加映射 Person 类的 NHibernate 以加载 CreatedDate / CreatedBy 但将这些值放在一些外部结构或其他东西中......这就是什么我不知道怎么解决。谢谢,
-
没有 NHiberante 做不到的事情,用 NHibernate 做不到。
标签: c# nhibernate proxy nhibernate-mapping mapping