![](/img/trans.png)
[英]Fluent Nhibernate Automapping with overrides: Map an unmapped base class collection
[英]Fluent NHibernate automapping child class when base already exists in database
我在使用Fluent NHibernate自動映射對象時遇到困難。
我有一個名為Document
類,該表已經存在於SqlServer中。
類Packet
擴展 Document
並具有成員PacketDefinition
。
PacketDefinition
有一個List
的Form
( 而不是Windows形式,但我自己的類 )類型。
我正在嘗試使用以下配置自動映射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
Table中創建Document
所有屬性,這不好。
如果我創建了一個單獨的數據庫,然后嘗試運行相同的代碼,則該Document
將起作用,因為該數據庫中不存在Document
表。 我不想刪除現有表,因為其中有很多數據。
如果我理解正確,則您嘗試避免刪除“文檔”表,因為“其中有很多數據”。
我不知道您要做什么。 FNH和NH沒有任何數據遷移功能(AFAIK),當您嘗試以這種方式使用它時,我認為您只是在與系統作斗爭。
如果只是一張表,也許您可以做一些簡單的事情,例如將其導出為CSV文件等平面格式,然后讓FNH重建架構,然后再次導入數據。
但是,隨着模式的發展和變得越來越復雜,這種方法可能無法很好地擴展。
在我的項目中,我們能夠避免這個問題,因為我們先將數據保存在舊程序也使用的專有二進制文件中,因此我們可以在架構更改時重新導入所有數據。 但這對於大多數項目來說並不理想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.