从流畅的nhibernate描述构建的SQLite DB会生成不可为空的列

时间:2013-01-10 17:56:57

标签: nhibernate fluent-nhibernate nhibernate-mapping system.data.sqlite schemaexport

我有以下代码来创建用于测试的内存中SQLite DB:

        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_IDInternalFund没有。不幸的是,这意味着我无法持久化InternalFund,因为它会抛出SQL异常。

我的测试不需要参考完整性,所以如果我能让所有列都可以为空,那就很高兴。

有谁知道怎么做?

由于

斯图

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

哎呀,非常抱歉。除非另有说明,否则SQLite数据库似乎假定为可空性 - 与在创建语句中需要它的TSQL不同。

事实上,我发现隐藏在一个子方法中,特定属性在映射中没有设置空值。删除它会对问题进行排序。

感谢您发布关于约定的内容,我会看一下,因为我还有另一个问题可能会排序。

干杯

斯图