1

我有以下代码来创建用于测试的内存 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 异常。

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

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

谢谢

斯图

4

2 回答 2

1

糟糕,非常抱歉。除非另有说明,否则 SQLite DB 似乎假定可空性 - 不像 TSQL 在 create 语句中需要它。

事实上,我发现隐藏在一个子方法中,即特定属性在映射中设置了非空值。删除它可以解决问题。

不过,感谢您发布有关约定的信息,我会看看,因为我有另一个问题,他们可能会排序。

干杯

斯图

于 2013-01-14T10:27:59.340 回答
1

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

于 2013-01-11T19:46:49.790 回答