1

我继承了一堆 Fluent NHibernate 映射,它们目前都在它们所在的项目中工作(即应用程序使用它们并且工作)。现在我正在尝试为一些新映射构建集成测试,因此使用所有这些 - 旧的和新的 - 来生成模式,使用

new SchemaExport(Container.Resolve<Configuration>()).Create(true, true);

但是,执行的 SQL 生成脚本有一些无效代码。大多数问题似乎源于以下两种情况之一:

// x.Map is string
Map(x => x.Map).Column("Karta").Not.Nullable().Default("False");
// x.Active is bool
Map(x => x.Active).Column("Aktiv").Not.Nullable().Default("True");

发生的情况是,在创建此表的语句中,对应于上述映射的行如下所示(它们实际上位于不同的类型和不同的表中):

Karta NVARCHAR(255) default False  not null,
Aktiv BIT default True  not null,

where (显然)False不起作用,因为没有具有该名称的变量,并且 SQL Server 中不存在布尔值。

我该如何解决这个问题?

我不想更改映射,因为有一个使用并依赖于它们的大型应用程序 - 我不知道(我现在不想知道)如果引入了哪些细微的错误比如说,我删除了默认规范。但是,如果我可以更改"False"并更改"True"为可行的东西,那是完全可以的-只要很明显它不会改变其他地方的任何行为即可。

4

1 回答 1

1

可以更改 .Default,应用程序不会从映射中获取默认值,如果属性未在构造函数或属性初始化器(C# 3)。

FNH .Default 只对 DDL 创建有影响,应用行为不会受到影响。

可以将它们更改为:

Map(x => x.Map).Not.Nullable().Default("'True'");
Map(x => x.Aktiv).Not.Nullable().Default("0");

我非常怀疑您的团队将您的应用程序功能与 NH 紧密耦合,即使有一个 API 来促进这一点,从 NH 默认值或 FNH 默认值获取应用程序属性的默认值也太麻烦了。最好的了解方法是询问您的团队是否这样做。

于 2011-07-09T02:26:11.990 回答