如何告知entity frameworkfunction导入存储过程返回的列不可为空?
我有一个SQL Server存储过程,它重新解决这个问题:
CREATE PROCEDURE [jp].[GetFoo] @Guid UNIQUEIDENTIFIER AS SELECT CONVERT(BIT, (CASE WHEN [dbo].[GetBar](T.Col2) = 3 THEN 1 ELSE 0 END)) IsGetBarCol2EqualToThree FROM [dbo].[MyTable] T WHERE T.Col1 = @Guid
当我在EF中执行函数导入/获取列信息时,列IsGetBarCol2EqualToThree的推断类型是Nullable
。 但是这个领域不可能是空的,所以我希望它只是bool
。 有没有办法在更新时持续执行此操作(即不依赖于修改任何生成的代码)?
SQL Server版本是2005,我使用Visual Studio 2010SP1和EF 4,项目是针对.net 4.0编译的。
进行此修改: isnull([dbo].[GetBar](T.Col2), 0)
您可以创建复杂类型,然后修改生成的字段的Nullable属性。 如果你不想改变你的sp,可能会有用。
一步步:
- 打开你的edmx
- 打开模型浏览器(查看 – >其他Windows->实体数据模型浏览器)
- 导航到生成的复杂类型中的字段(* .emdx-> Model-> Complex Types-> your type-> field)
- 打开属性窗口(按F4)
- 属性中应该有Nullable。 您可以在此处进行更改,并且不会在下一次模型更新时覆盖它,但如果重新创建复杂类型,则会丢失调整。
或者,您可以将edmx作为xml打开并找到相同的属性。
ps:我在VS2012,EF 5中进行了测试
你必须解决这个问题
1- alter procedure is isnull(“your expression”,0)然后从数据库更新模型并刷新。
2-您可以打开类模型并手动更改它,但是再次对模型进行任何更新,您将丢失更改。
所以我的观点是第一个解决方案是最好的。