Entity Framework中存储过程的返回值映射

我正在用EntityFramework调用一个存储过程,但我在部分实体类中设置的自定义属性为空。但我在部分实体类中设置的自定义属性是空的。我在我的edmx中有实体(我调用了edmx,我不知道该怎么称呼这个)。例如,我在数据库中有一个 “User “表,所以我在实体上有一个 “User “类,我有一个名为GetUserById(@userId)的存储过程,在这个存储过程中,我写了一个基本的sql语句,如下所示

"SELECT * FROM Users WHERE Id=@userId"

在我的edmx中,我做了一个函数导入来调用这个存储过程,并将其返回值设置为实体(也从下拉列表中选择用户)。当我调用我的存储过程时,它工作得很完美,就像下面这样。

User user = Context.SP_GetUserById(123456);

但我在存储过程中添加了一个自定义的新列,以返回一个更多的列,就像下面的那样。

SELECT *, dbo.ConcatRoles(U.Id) AS RolesAsString
    FROM membership.[User] U
    WHERE Id = @id

现在,当我从SSMS中执行它时,结果中出现了一个名为RolesAsString的新列,为了在实体框架上工作,我在我的User类中添加了一个名为RolesAsString的新属性,如下所示。

public partial class User
    {
        public string RolesAsString{ get; set; }
    }

但是当我调用这个字段时,这个字段并没有被存储过程所填充,我查看了SP_GetUserById的Mapping Detail窗口,在这个窗口中没有一个映射。我想添加,但窗口是只读,我不能映射它。我看了edmx的源头,没有找到任何关于SP的映射。

我怎样才能映射这个自定义字段?

解决方案:

你必须为SP创建一个复杂的类型,而不是使用部分类。

本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/16982.html

(0)
上一篇 1天前
下一篇 1天前

相关推荐

发表评论

登录后才能评论