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个实体类

  1. 像这样用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);
            }
        }
    }
    
  2. 创建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();
  1. 执行SchemaExport来创建模式:

    new SchemaExport(_configuration)
                    .Create(false, true);
    
然后Nhibernate用正确的表创建了一个完全工作的SQlite数据库!

但后来我想添加2个实体类(我已经以同样的方式做了),但当我运行我的测试(它创建了我的第一个数据库模式)它不添加新的类(表)到数据库!

最疯狂的事情是,测试总是删除任何已创建的数据库,并在每次运行测试时使用SchemaExport重新创建它。

有人能帮帮我吗?

Nhibernate(Fluent) SchemaExport and SQlite Problem!

您还可以选择直接对数据库更新使用Execute:

bool script = false;
bool update = true;
new SchemaExport(_configuration).Execute(script, update);

编辑:确保映射类是公共的

内存中的Sqlite仅在连接的生命周期内存在。因此,对于每个新连接,您都需要从头开始。

我知道两个解。一种方法是只使用单个会话(和连接)进行单元测试。另一个是我所做的:我实现了一个总是返回相同连接的连接提供程序。

您可以检查以下内容:-新的实体类在同一个程序集中吗?-还检查模型中的循环