[英]Nhibernate(Fluent) SchemaExport and SQlite Problem!
我正在將Nhibernate(Fluent)與Sqlite一起使用,並且我所做的工作沒有任何問題:
為每個表創建POCO EntityClasses,如下所示:
public class tbl_Manufactor : BusinessObject<tbl_Manufactor> { public virtual string Name { get; set; } }
實體類都從BusinessObject繼承,其中包含ID屬性和簡單的CRUD函數,我還有其他6個實體類
使用FluentHibernate創建映射,如下所示:
using Database.Entitites; using FluentNHibernate.Mapping; namespace Database.Mappings { public class tbl_ManufactorMap : ClassMap<tbl_Manufactor> { public tbl_ManufactorMap() { Id(x => x.ID); Map(x => x.Name); } } }
這樣創建Fluent Config:
var Config = Fluently.Configure() .Database(SQLiteConfiguration.Standard .ConnectionString(c=>c.FromConnectionStringWithKey("dbconnection")) .ShowSql()) .Mappings(m => m.FluentMappings.AddFromAssemblyOf<tbl_Manufactor>()) .ExposeConfiguration(cfg => _configuration = cfg) sessionFactory = Config.BuildSessionFactory();
執行SchemaExport以使用以下方法創建模式:
new SchemaExport(_configuration) .Create(false, true);
然后Nhibernate使用正確的表創建了一個可以正常運行的SQlite數據庫!
但是然后我想添加2個實體類(我以與以前相同的方式進行了操作),但是當我運行測試(創建了我的第一個數據庫模式)時,它沒有將新的類(表)添加到數據庫中!
最瘋狂的事情是,每次運行測試時,該測試始終刪除所有已創建的數據庫並使用SchemaExport重新創建它。
有人可以幫我嗎?
您還可以選擇直接將執行用於數據庫更新:
bool script = false;
bool update = true;
new SchemaExport(_configuration).Execute(script, update);
編輯:確保映射類是公共的。
內存中的Sqlite僅在連接的生存期內存在。 因此,對於每個新連接,您都需要從頭開始。
我知道兩種解決方案。 一種是僅對單元測試使用單個會話(和連接)。 另一個是我所做的:我實現了一個連接提供程序,該提供程序始終返回相同的連接。
您可以檢查以下各項:-新的實體類是否在同一程序集中? -還檢查模型中的循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.