C# Fluent NHibernate在数据库中已存在基时自动映射子类
我无法使用Fluent NHibernate自动映射对象 我有一个名为C# Fluent NHibernate在数据库中已存在基时自动映射子类,c#,fluent-nhibernate,fluent-nhibernate-mapping,C#,Fluent Nhibernate,Fluent Nhibernate Mapping,我无法使用Fluent NHibernate自动映射对象 我有一个名为Document的类,SqlServer中已经存在该类的表 类数据包扩展了文档,并具有成员数据包定义 PacketDefinition具有表单的列表(不是windows表单,而是我自己的类)类型 我正在尝试使用以下配置自动映射数据包对象 var mapping = CreateMappings(); _sessionFactory = Fluently.Configure()
Document
的类,SqlServer中已经存在该类的表
类数据包
扩展了文档
,并具有成员数据包定义
PacketDefinition
具有表单的列表
(不是windows表单,而是我自己的类)类型
我正在尝试使用以下配置自动映射数据包
对象
var mapping = CreateMappings();
_sessionFactory = Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2008.ConnectionString(
c => c.Server("machinename\\sql2012").Database("DatabaseName").TrustedConnection())
.ShowSql)
.Mappings(m => m.AutoMappings.Add(mapping))
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
private static AutoPersistenceModel CreateMappings()
{
return AutoMap
.AssemblyOf<Packet>();
}
private static void BuildSchema(Configuration config)
{
new SchemaExport(config).Create(false, true);
}
但是,自动映射也会在数据包
表中创建文档
的所有属性,这并不好
如果我创建一个单独的数据库,然后尝试运行相同的代码,它的工作原理是该数据库中不存在Document
table。我不想删除现有表,因为其中包含大量数据。如果我理解正确,您正试图避免删除文档表,因为“其中包含大量数据”
我不知道有什么办法可以做你想做的事。FNH和NH没有任何数据迁移功能(AFAIK),我认为当您试图以这种方式使用它时,您只是在与系统作斗争
如果它只是一个表,也许您可以做一些简单的事情,比如将它导出为一个平面格式(如CSV文件),然后让FNH重新构建模式,然后再次导入数据
然而,随着模式的发展,这种方法可能无法很好地扩展,并且变得更加复杂
在我的项目中,我们能够回避这个问题,因为我们首先将数据保存在我们的遗留程序也使用的专有二进制文件中,这样我们就可以在模式更改时重新导入所有数据。但这对大多数项目来说并不理想。谢谢您的回复。您是对的,我不想删除现有表,因为它包含大量数据。此外,我的数据库模式非常复杂,因此导出数据并重新导入可能会给很多客户带来一大堆麻烦。EF能更好地处理这个问题吗?我没有EF的经验,但最近读到EF有更好的迁移工具。但他们也表示,映射和模式生成不如FNH/NH。也许您应该发布另一个SO问题,询问关于FNH/NH模式生成的数据迁移策略。
AutoMap.AssemblyOf<Packet>().IgnoreBase<Document>();