Sql server 2005 正在工作的Fluent NHibernate映射呈现无效的CreateSchema SQL
我继承了一系列Fluent NHibernate映射,它们目前都在它们所在的项目中工作(即应用程序使用它们并工作)。现在,我正在尝试为一些新映射构建集成测试,从而使用所有这些映射(旧映射和新映射)生成模式,使用Sql server 2005 正在工作的Fluent NHibernate映射呈现无效的CreateSchema SQL,sql-server-2005,fluent-nhibernate-mapping,Sql Server 2005,Fluent Nhibernate Mapping,我继承了一系列Fluent NHibernate映射,它们目前都在它们所在的项目中工作(即应用程序使用它们并工作)。现在,我正在尝试为一些新映射构建集成测试,从而使用所有这些映射(旧映射和新映射)生成模式,使用 new SchemaExport(Container.Resolve<Configuration>()).Create(true, true); 发生的情况是,在创建此表的语句中,与上述映射对应的行如下所示(它们实际上位于不同的类型和不同的表中): 其中(显然)False不
new SchemaExport(Container.Resolve<Configuration>()).Create(true, true);
发生的情况是,在创建此表的语句中,与上述映射对应的行如下所示(它们实际上位于不同的类型和不同的表中):
其中(显然)False
不起作用,因为没有具有该名称的变量,并且SQL Server中不存在布尔值
我如何解决这个问题
我不想更改映射,因为有一个大型应用程序使用并依赖于它们——我不知道(现在我也不想知道)如果我删除默认规范,会引入哪些细微的错误。但是,如果我可以将
“False”
和“True”
更改为可以工作的东西,那是完全可以的-只要很明显它不会在其他地方更改任何行为。更改默认值是可以的。默认值是,应用程序不会从映射中获得默认值,如果属性未在构造函数或属性初始值设定项(C#3)中初始化,则应用程序将从属性的语言默认值(string=null、int=0、bool=false等)接收默认值
默认值仅与DDL创建有关,应用程序行为不会受到影响
可以将其更改为:
Map(x => x.Map).Not.Nullable().Default("'True'");
Map(x => x.Aktiv).Not.Nullable().Default("0");
我非常怀疑你的团队是否将你的应用程序功能与NH紧密结合,从NH default或FNH default中获取应用程序属性的默认值太麻烦了,即使有API可以帮助实现这一点。最好的了解方法是询问您的团队是否这样做。可以更改默认值。如果未在构造函数或属性初始值设定项(C#3)中初始化属性,则应用不会从映射中获取默认值,应用会从属性的语言默认值(string=null、int=0、bool=false等)接收默认值 默认值仅与DDL创建有关,应用程序行为不会受到影响 可以将其更改为:
Map(x => x.Map).Not.Nullable().Default("'True'");
Map(x => x.Aktiv).Not.Nullable().Default("0");
我非常怀疑你的团队是否将你的应用程序功能与NH紧密结合,从NH default或FNH default中获取应用程序属性的默认值太麻烦了,即使有API可以帮助实现这一点。最好的了解方法是询问您的团队是否这样做
Map(x => x.Map).Not.Nullable().Default("'True'");
Map(x => x.Aktiv).Not.Nullable().Default("0");