2010-04-03 54 views
2

我在使用抽象类NHibernate的,自动映射和链接抽象类

这是一个类似于此

public abstract class AbstractClassA {} 

public abstract class AbstractClassB : AbstractClassA {} 

public class ClassA : AbstractClassB {} 

当我尝试的多条链使用NHibernate类结构的一些麻烦,自动映射和构建这些映射,我收到以下错误

“FluentNHibernate.Cfg.FluentConfigurationException未处理 消息:创建SessionFactory时使用了无效或不完整的配置。请参阅PotentialReasons集合和InnerException以获取更多详细信息。

  • 数据库不是通过数据库的方法进行配置。”

但是,如果我删除AbstractClassB抽象的关键词,一切工作正常。这个问题只有当我有一个以上的抽象类中发生类层次结构。

我手工配置的自动映射为包括AbstractClassA和AbstractClassB使用下面的结合类

public class BindItemBases : IManualBinding 
{ 
    public void Bind(FluentNHibernate.Automapping.AutoPersistenceModel model) 
    { 
     model.IncludeBase<AbstractClassA>(); 
     model.IncludeBase<AbstractClassB>(); 
    } 
} 

我不得不做一些黑客来解决这个问题,但是必须有更好的方法来实现这个目标。当然nHibernate支持这样的东西,我只是没有想出如何正确配置它。

干杯,

詹姆斯

回答

0

你为什么在您AutoMappings抽象类,都在数据库中也呈现?你能否提供Fluent抛出的内部异常?

model.IncludeBase<AbstractClassA>(); 
model.IncludeBase<AbstractClassB>(); 

有了这个地方,您正试图将AbstractClassB映射到数据库,而这本不应该是您想要的。

+0

我想包括他们,因为有几个不同的类从他们派生。如果我删除了摘要,所有的东西都可以正常工作,但我宁愿不这样做。如果我不包含基础,那么派生类将分别获得它们自己的表。我不想那样。如果我从AbstractClassA直接派生ClassA,那么事情就是按照我想要的方式工作的。当我在中间添加AbstractClassB时,它会翻倒。 – 2010-04-03 05:42:00

+0

为什么不直接从映射中排除AbstractClassB,而将其作为基类放置? – 2010-04-03 06:02:10

+0

如果我从映射中排除AbstractClassB,我得到一个映射异常,'从表ClassA的关联引用一个未映射的类:AbstractClassB' – 2010-04-03 09:20:06