刷新模型时如何在edmx中保留不可为空的设置?

Mac*_*iej 7 entity-framework visual-studio-2012

我有一个项目,我最近从VS2010迁移到VS2012.

它包含一个包含我的实体的EF4.1 edmx文件.其中一些实体基于视图并且是只读的.虽然视图返回的某些列是可空的,但我已更改视图中这些列的返回值,以确保它们不会通过使用返回null

ISNULL(NumericColumnName, 0) AS NumericValueColumn
Run Code Online (Sandbox Code Playgroud)

通过VS2010中的"从数据库更新模型"功能更新模型时,以这种方式返回的列在我的模型中被创建为不可为空.但是,自从迁移到VS2012后,情况就不再如此.

现在,每当我使用"从数据库更新模型"功能时,这些属性都会生成为可空.我要做的是手动将列设置为不可为空.但是,下次运行"从数据库更新模型"时,实体属性将重新生成为可空.然后我必须再次将它们更新为非可空.

我尝试过的另一种解决方法是将基于视图的实体移动到他们自己的edmx文件中.但是,我在更新一edmx文件时看到了相同的行为.

另一个细节是我正在使用通过EF4.1 T4 STE模板生成的自我跟踪实体.

有没有办法阻止VS2012的EF设计器覆盖基于视图的实体的非可空属性?

编辑

事实证明,VS2012中的设计师试图阻止你在脚下射击,从而改变我实体内的成员属性.

从以下生成成员时:

SELECT ISNULL(Quantity,0) * ISNULL(Number, 0) AS Total FROM SomeTable
Run Code Online (Sandbox Code Playgroud)

VS2012将始终将SomeTable实体上的成员Total设置为可为空,因为它不理解乘法结果无法为0.要防止此行为,请将其更改为:

SELECT ISNULL(Quantity * Number, 0) AS Total FROM SomeTable.
Run Code Online (Sandbox Code Playgroud)

注意聚合ISNULL(SUM(SomeCol),0)是不一样的SUM(ISNULL(SomeCol,0)).