Nhibernate(Fluent) SchemaExport and SQlite Problem!
本文关键字:SQlite Problem and SchemaExport Fluent Nhibernate | 更新日期: 2023-09-27 17:49:59
我正在使用Nhibernate(Fluent)和Sqlite,我所做的工作没有任何问题:
-
像这样为每个表创建POCO EntityClasses:
public class tbl_Manufactor : BusinessObject<tbl_Manufactor> { public virtual string Name { get; set; } }
实体类都继承自包含ID属性和简单CRUD函数的BusinessObject我还有其他6个实体类
-
像这样用fluenthiberate创建映射:
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配置如下:
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);
但后来我想添加2个实体类(我已经以同样的方式做了),但当我运行我的测试(它创建了我的第一个数据库模式)它不添加新的类(表)到数据库!
最疯狂的事情是,测试总是删除任何已创建的数据库,并在每次运行测试时使用SchemaExport重新创建它。
有人能帮帮我吗?
您还可以选择直接对数据库更新使用Execute:
bool script = false;
bool update = true;
new SchemaExport(_configuration).Execute(script, update);
编辑:确保映射类是公共的
内存中的Sqlite仅在连接的生命周期内存在。因此,对于每个新连接,您都需要从头开始。
我知道两个解。一种方法是只使用单个会话(和连接)进行单元测试。另一个是我所做的:我实现了一个总是返回相同连接的连接提供程序。
您可以检查以下内容:-新的实体类在同一个程序集中吗?-还检查模型中的循环