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

时间:2012-09-26 14:28:29

标签: entity-framework visual-studio-2012

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

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

返回null
ISNULL(NumericColumnName, 0) AS NumericValueColumn

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

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

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

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

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

修改

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

从以下位置生成成员时:

SELECT ISNULL(Quantity,0) * ISNULL(Number, 0) AS Total FROM SomeTable

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

SELECT ISNULL(Quantity * Number, 0) AS Total FROM SomeTable.

注意汇总,因为ISNULL(SUM(SomeCol),0)SUM(ISNULL(SomeCol,0))不同。

0 个答案:

没有答案