首页 > 解决方案 > 为什么 Entity Framework 在存储过程 MyProp 和 MyProp1 中创建一个带有附加数字的属性?

问题描述

我的存储过程返回各种列,它不是可变的,结果总是固定的。

当我在 Entity Framework 中按“获取列信息”时,所有列都正确显示在预览窗口中,包括MyProp.

然而,当我按下创建复杂类型时,它最终会出现

string MyProp {get; set;}
string MyProp1 {get; set;}

在复杂类型类中的所有其他字段中。

发生这种情况有原因吗?不应该有 MyProp1。其余的列都很好。

预计到达时间:

edmx 中没有什么异常。在 sproc 中返回了多个相同类型 ( nvarchar(30)) 的东西。edmx 的格式与 MyProp 相同。我看不到任何冲突,例如有一个与属性同名的类或类似的东西。

我已将字段名称设为空白,但MyProp它是与其他字段一样被检测到的字段之一,它只出现一次,没有名称冲突等,但输出 .cs 文件的两倍MyPropMyProp1

图片

标签: c#entity-frameworkstored-procedures

解决方案


把头发扯了一会儿,我已经修好了。

列的类型是nvarchar(30) null

在存储过程中,我从字段为 的表中填充它nvarchar(20) null,基本上我的存储过程是这段代码(简化,可能不是 100% 准确):

DECLARE @Results TABLE (
    [MyProp] [nvarchar](30) Null
)

Insert Into @Results
    Select [MyProp] from MyTable

SELECT * From @Results

MyTableMyProp实际上是nvarchar(20) Null而不是nvarchar(30) Null

因此,即使没有精度损失,因为它更小,但出于某种原因,EF 似乎正在检查表的填充方式并创建一个额外的字段。我不知道为什么,但是将 MyProp 更改nvarchar(20) Null为匹配它正在填充的表已经修复了它。

莫名其妙。


推荐阅读