实体框架导入的函数返回类型未更新

本文关键字:返回类型 更新 函数 框架 导入 实体 | 更新日期: 2023-09-27 18:34:09

我有一些使用实体框架从SQL脚本生成的C#函数。 但是,我需要为这些函数指定不同的返回类型。

这两个函数都返回 ObjectResult 类型,但我需要将其切换到表生成的自定义数据类型(例如,将其从 ObjectResult 更改为 User(。

目前,我正在Visual Studio中打开.edmx文件,右键单击并选择"模型浏览器"。 然后,我在"函数导入"下找到我的函数,突出显示并在属性窗口中编辑返回类型。 我通过单击"..."按钮,并将"返回集合"值更改为实体 -> 用户。 我单击确定,但该函数仍然返回以前的类型。

在Model.Context.cs中找到该函数,我看到代码没有更改。 下面是生成的函数:

    public virtual ObjectResult<User> AddUser(string login, string consoleName, string ip, MergeOption mergeOption)
    {
        var loginParameter = login != null ?
            new ObjectParameter("Login", login) :
            new ObjectParameter("Login", typeof(string));
        var consoleNameParameter = consoleName != null ?
            new ObjectParameter("ConsoleName", consoleName) :
            new ObjectParameter("ConsoleName", typeof(string));
        var ipParameter = ip != null ?
            new ObjectParameter("Ip", ip) :
            new ObjectParameter("Ip", typeof(string));
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<User>("AddUser", mergeOption, loginParameter, consoleNameParameter, ipParameter);

我尝试手动将返回类型从"ObjectResult"更改为"User",但这会导致返回行出错。 由于返回行正在调用存储过程,因此我不确定将其更改为什么以保持过程调用正常工作,但返回不同的类型。

更新:

为了不在网上找到答案,我现在正在尝试手动编辑该功能。 更改函数定义中的返回类型很容易:

    public virtual LogFile AddFile(string name, Nullable<System.DateTimeOffset> recordedDate, string build, Nullable<long> userId, MergeOption mergeOption)

但是,这当然也需要更改返回行,并且由于返回行包含对存储过程的实际调用,因此我不确定应该将其更改为什么。

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<LogFile>("AddFile", mergeOption, nameParameter, recordedDateParameter, buildParameter, userIdParameter);

实体框架导入的函数返回类型未更新

@Gert阿

诺德的评论是正确的。 数据类型最初是 ObjectResult在模型浏览器中进行更改将其更改为 ObjectResult<用户>我根本没有注意到更改。

我试图让它返回一个直接的用户,部分原因是我不熟悉 ObjectResult 并且考虑到该类的方法和属性,似乎没有一种明显的方法可以从中提取用户(部分原因是我在代码审查中被告知(。 我在这里找到了我真正需要的东西:

如何在实体框架 4 中处理 ObjectResult

在不触及函数定义的情况下,这是我的新函数调用(经过大量调整(:

returnedUser = entities.AddUser(user.Login, user.ConsoleName, user.Ip).FirstOrDefault();                       // Upload the user.
returnedFile = entities.AddFile(file.Name, file.RecordedDate, file.Build, returnedUser.Id).FirstOrDefault();   // Upload the file.

让我们希望这能满足一些,诚然,挑剔的人。