2014-12-13 67 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. 

讓我們希望這滿足了一些,誠然,挑剔的人。