Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何告诉实体框架函数导入存储过程返回的列不可为null?_C#_Sql Server_Entity Framework_.net 4.0 - Fatal编程技术网

C# 如何告诉实体框架函数导入存储过程返回的列不可为null?

C# 如何告诉实体框架函数导入存储过程返回的列不可为null?,c#,sql-server,entity-framework,.net-4.0,C#,Sql Server,Entity Framework,.net 4.0,我有一个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

我有一个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中执行函数Import/Get列信息时,该列的推断类型是getBarCol2eQualtotree,即
Nullable
。但是这个字段不可能是空的,所以我希望它只是
bool
。有没有一种方法可以在更新时保持不变(即不依赖于修改任何生成的代码)


SQL Server版本是2005年,我使用的是Visual Studio 2010SP1和EF 4,项目是根据.net 4.0编译的。

进行以下修改:
isnull([dbo].[GetBar](T.Col2),0)
您可以创建复杂类型,然后修改生成字段的可空属性。 如果您不想更改sp,则此功能非常有用

逐步:

  • 打开你的edmx
  • 打开模型浏览器(视图->其他窗口->实体数据模型浏览器)
  • 导航到生成的复杂类型(*.emdx->Model->complex Types->your type->field)中的字段
  • 打开属性窗口(按F4键)
  • 属性中应该有可为空的。您可以在此处更改它,它不会在下一次模型更新时被覆盖,但如果重新创建复杂类型,您将失去调整
或者,您可以将edmx作为xml打开,并找到相同的属性

<ComplexType Name="...">
          <Property Type="Int32" Name="..." Nullable="true" />


ps:我在VS2012中测试了它,EF 5

您必须找到解决此问题的方法

1-将过程更改为isnull(“您的表达式”,0),然后从数据库更新模型并刷新

2-您可以打开类模型并手动更改它,但是如果再次对模型进行任何更新,您将丢失更改


因此,我认为第一种解决方案是最好的。

如果你这样做会发生什么。isnull([dbo].[GetBar](T.Col2),0)?它可以工作,谢谢。你可以这样回答我,我会接受的!作为补充信息,我发现函数导入中有一个错误:ISNULL可以工作,但您必须从SP中删除列,导入它,重新添加列(使用ISNULL更改),然后重新导入。@EvrenKuzucuoglu-是的,某些更改不能通过使用GUI中的update命令进行更新。您会发现,将存储过程与EF一起使用是一个主要的难题:(@EvrenKuzucuoglu-这不仅仅是存储过程-对表/视图的更改(列重命名、可空性更改)在UI中也没有正确刷新。对于某些复杂视图,此解决方法并不总是成功的。