2014-12-13 33 views
0

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

这两个函数都返回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”到“用户”手动更改返回类型,但这会导致在回油管的错误。由于返回行正在调用存储过程,我不确定要将其更改为何以保持过程调用正常工作,但返回的类型不同。

UPDATE:

代替不在线找到答案的,我现在正在努力手动编辑功能。改变在函数定义的返回类型很简单:

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); 
+0

我认为代码*做了*更改。它默认应该是'ObjectResult '。你把它改成了'ObjectResult '。我不会篡改这个生成的代码。与它一起生活并从应用程序代码中的ObjectResult获取'User'。 – 2014-12-15 21:42:54

回答

0

@Gert Arnold在他的评论中是正确的。数据类型最初是ObjectResult < AddUser_Result>,并在模型浏览器中进行更改,将其更改为ObjectResult <用户>并且我根本没有注意到这一更改。

我试图让它返回一个直接的用户,部分原因是我不熟悉ObjectResult,并且在给定该类的方法和属性的情况下似乎没有一种明显的方式从用户提取用户部分原因是我被告知在代码审查中)。我发现我真的需要在这里:

How to handle ObjectResult in Entity Framework 4

没有触摸功能的定义,这里是我的新的函数调用(大量的调整后):

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. 

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