实体框架导入的函数返回类型未更新
本文关键字:返回类型 更新 函数 框架 导入 实体 | 更新日期: 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);
诺德的评论是正确的。 数据类型最初是 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.
让我们希望这能满足一些,诚然,挑剔的人。