1

我有以下代码来创建一个内存中的SQLite数据库来进行测试:的SQLite数据库产生不可为空列

 Configuration config = null; 
     FluentConfiguration fluentConfiguration = Fluently.Configure().Database(SQLiteConfiguration.Standard.InMemory().ShowSql() 
      ).Mappings(m => 
       { 
        m.FluentMappings.AddFromAssemblyOf<ReturnSourceMap>(); 
        m.HbmMappings.AddFromAssemblyOf<ReturnSourceMap>(); 
        m.FluentMappings.AddFromAssemblyOf<EchoTransaction>(); 
       }).ExposeConfiguration(c => config = c); 

     ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory(); 

     _session = sessionFactory.OpenSession(); 

     new SchemaExport(config).Execute(true, true, false, _session.Connection, Console.Out); 

这似乎很好地工作对于大多数事情,但不幸的是它将所有列创建为不可为空。

比如我有两个类:

InternalFundExternalFund。两者都从Fund继承,并且都坚持到同一个表。

ExternalFund有一列Manager_ID,InternalFund没有。不幸的是,这意味着我不能坚持InternalFund,因为它会抛出一个SQL异常。

我不需要我的测试的参照完整性,所以如果我可以使所有列都可以为空,我会很高兴。

有谁知道如何做到这一点?

感谢

斯图

回答

1

糟糕,非常抱歉。似乎SQLite数据库假定可以为空,除非另有说明 - 不同于在创建语句中要求它的TSQL。

事实上,我发现隐藏在一个子方法中,该特定属性在映射中具有非空集。删除这个排序的问题。

感谢您发布约定,虽然我会看看,因为我有另一个问题,他们可能会排序。

干杯

斯图

1

你应该尝试使用的Conventions的FluentNhibernate功能。如果您查看this链接,您会看到第一个示例是将空性设置为默认值。