我有困难使用流利NHibernate自动映射我的对象。流利NHibernate的自动映射子类,当基地已经存在于数据库中
我有类调用Document
对于该表SQLServer中已经存在。
类Packet
延伸Document
和有一个构件PacketDefinition
。
PacketDefinition
有Form
的List
(没有窗户的形式,但我自己的类)型。
我试图自动映射使用以下配置Packet
对象。
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);
}
问题是,当我尝试自动映射Packet
类,我得到错误说
System.Data.SqlClient.SqlException : There is already an object named 'Document' in the database.
据我所知,Document
表已经存在于数据库中,我也不想放弃它。我试着忽略使用
AutoMap.AssemblyOf<Packet>().IgnoreBase<Document>();
的基类,但随后在自动映射表Packet
创建的Document
所有属性太,这是不好的。
如果我创建一个单独的数据库,然后运行一下它的工作原理为Document
表相同的代码在数据库中不存在。我不想放弃现有的表格,因为里面有很多数据。
感谢您的回复。你是对的,我不想放弃现有的表格,因为它包含很多数据。另外我的数据库模式非常复杂,所以导出数据和重新导入可能会导致很多客户陷入混乱。英孚是否处理这个更好? – Mayank 2013-03-12 15:05:13
我对EF没有经验,但最近读到EF有更好的移植工具。但他们也表示,制图和图式生成几乎不如FNH/NH。也许你应该发布另一个SO问题,询问有关FNH/NH模式生成的数据迁移策略。 – 2013-03-12 15:29:59