我有一个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>
。但是这个字段无法为空,所以我希望它只是bool
。有没有办法在更新时保持持久性(即不依赖于修改任何生成的代码)?
SQL Server版本是2005,我使用Visual Studio 2010SP1和EF 4,项目是针对.net 4.0编译的。
答案 0 :(得分:10)
进行此修改:isnull([dbo].[GetBar](T.Col2), 0)
答案 1 :(得分:2)
您可以创建复杂类型,然后修改生成的字段的Nullable属性。 如果您不想更改sp,则可能很有用。
一步一步:
或者,您可以将edmx作为xml打开并找到相同的属性。
<ComplexType Name="...">
<Property Type="Int32" Name="..." Nullable="true" />
ps:我在VS2012,EF 5中进行了测试
答案 2 :(得分:0)
您必须解决此问题的方法
1- alter procedure is isnull(&#34;你的表达式&#34;,0)然后从数据库更新你的模型并刷新。
2-您可以打开班级模型并手动更改,但是再次对模型进行任何更新,您将失去更改。
所以我的观点是第一个解决方案是最好的。