我只是获得FluentNHibernate设置,并尝试仅自动映射一个类。自动映射几乎是一个要求,因为我要处理大约80-90个类,其中许多每个类包含20、30甚至40个属性。这是具有现有数据库的现有域,因此无法重新设计。尝试使用与文档示例中几乎相同的代码来天真地自动映射一个类。
private static ISessionFactory CreateSessionFactory()
{
var cs = System.Configuration.ConfigurationManager.
ConnectionStrings["MyConnectString"].ConnectionString;
return Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2012.ConnectionString(cs)
)
.Mappings(x => x.AutoMappings.Add(CreateAutoMappings()))
.BuildSessionFactory();
}
其中的方法CreateAutomappings():
private static AutoPersistenceModel CreateAutoMappings()
{
return AutoMap.AssemblyOf<MySubClass>(new
MySubClassAutomappingConfiguration())
.Conventions.Add<CascadeConvention>() ;
}
MySubClassAutomappingConfiguration仅选择一个要映射的类,并从DefaultAutomappingConfiguration派生。
所以最后我收到服务器错误:
Tried to add property 'ServerID' when already added.
Description: An unhandled exception occurred during the execution of the
current web request. Please review the stack trace for more information about
the error and where it originated in the code.
Exception Details: System.InvalidOperationException: Tried to add property
'ServerID' when already added.
ServerID是从MySubClass的基类(我们称其为MySubClassBaseClass)派生的属性,并在MySubClass中被覆盖。因此,针对从基本类映射派生的类映射(例如,在Use a derived class in fluent nHibernate中针对此错误调用的一些修复程序)。
现在,我的问题是,我能否流畅地映射基类和子类?假设它甚至可以解决我的错误,尽管我认为仍然可以这样做。