【发布时间】:2010-12-17 13:09:43
【问题描述】:
我有一个非常可扩展和模块化的应用程序。我想从其他程序集中扩展映射的实体。然而,我仍然需要对基类进行操作。
例子:
程序集 A 中的父类映射:
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Table("Persons");
Id(x => x.Id).GeneratedBy.Assigned();
}
}
程序集 B 中的子类映射:
public class EmployeeMap : SubclassMap<Employee>
{
public EmployeeMap()
{
Table("Persons");
Extends(typeof(Person));
KeyColumn("Id");
LazyLoad();
HasMany<Assignments>(x => x.Assignments).KeyColumn("Id").Inverse().Cascade.AllDeleteOrphan().LazyLoad().NotFound.Ignore();
}
}
现在,每当我在程序集 A 的某些代码中创建一个 Person 时,NHibernate 都会将它保存为 Employee。每当我保存一个 Person 并尝试在程序集 A 中刷新它时,由于代理而导致类转换异常。程序集 A 不能依赖于程序集 B。
我需要在程序集A的所有方法中对父类进行操作。子类只在其他程序集中使用。
我怎样才能映射这样的东西?我如何告诉 NHibernate 将其保存为父类?我使用 SaveOrUpdate 来持久化实体;如何正确扩展实体并将它们保存到同一个表中而没有区别? NHibernate 不能按对象类型区分吗?有解决方法吗?
我不想指定手动代理,因为我必须为每个实体创建一个代理!由于依赖问题,我无法使用访问者模式。
我需要一种方法来扩展不同程序集中的映射实体而不会出现此类问题!数据库是遗留的,我无法更改它。您将如何解决这个问题?
【问题讨论】:
标签: c# .net nhibernate orm