我正在使用Nhibernate(Fluent)和Sqlite,它没有遇到任何问题:
为每个表创建POCO EntityClasses,如下所示:
public class tbl_Manufactor : BusinessObject<tbl_Manufactor> { public virtual string Name { get; set; } }
Entity Classes都继承自BusinessObject,其中包含ID Property和简单的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配置:
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重新创建它。
有人可以帮助我吗?
答案 0 :(得分:3)
您还可以选择直接使用Execute进行数据库更新:
bool script = false;
bool update = true;
new SchemaExport(_configuration).Execute(script, update);
编辑:确保映射类是公开的。
答案 1 :(得分:1)
内存中的Sqlite仅存在连接的生命周期。因此,对于每个新连接,您需要从头开始。
我知道两个解决方案。一种是仅使用单个会话(和连接)进行单元测试。另一个是我做的:我实现了一个始终返回相同连接的连接提供程序。
答案 2 :(得分:0)
您可以查看以下内容: - 新实体类是否在同一个程序集中? - 还要检查模型中的循环。