Nhibernate(流畅)SchemaExport和SQlite问题!

时间:2011-04-12 11:37:31

标签: c# sqlite fluent-nhibernate

我正在使用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个实体类

  1. 使用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);
            }
        }
    }
    
  2. 像这样创建Fluent配置:

  3.  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);
      
    2. 然后Nhibernate用正确的表创建了一个完全正常工作的SQlite数据库!

      但后来我想添加2个实体类(我以与以前相同的方式完成)但是当我运行我的测试(创建我的第一个数据库模式)时,它不会将新类(表)添加到数据库中!

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

      有人可以帮助我吗?

3 个答案:

答案 0 :(得分:3)

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

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

编辑:确保映射类是公开的。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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