如何告知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-您可以打开类模型并手动更改它,但是再次对模型进行任何更新,您将丢失更改。

所以我的观点是第一个解决方案是最好的。