2009-09-03 43 views
0

我有一個存儲過程GetMyTime。它有一個參數int PersonID,並返回一個數據時間。將它添加到EDMX並將其作爲函數導入後。然後我試圖嘲弄了4.0編寫如下代碼:如何在EF 3.5中爲存儲過程編寫導入函數的代碼?

public ObjectResult<Nullable<global::System.DateTime>> GetMyTime(Nullable<global::System.Int32> PersonID) 
     { 
      ObjectParameter[] PersonIDParameters; 
      if (PersonID.HasValue) 
      { 
       PersonIDParameters = new ObjectParameter[]{new ObjectParameter("PersonID", PersonID)}; 
      } 
      else 
      { 
       PersonIDParameters = new ObjectParameter[]{new ObjectParameter("PersonID",typeof(global::System.Int32))}; 
      } 
      return base.ExecuteFunction<Nullable<global::System.DateTime>>("GetMyTime", PersonIDParameters); //this line cause error 
     } 

但我會在最後一行錯誤:「System.DateTime的」 錯誤2類型不能在通用類型或方法'System.Data.Objects.ObjectContext.ExecuteFunction(string,params System.Data.Objects.ObjectParameter [])'中用作類型參數'TElement'。 「System.DateTime?」沒有裝箱轉換到'System.Data.Objects.DataClasses.IEntityWithChangeTracker'。

如何解決?

回答

1

根據MSDN,"TElement"ExecuteFunction<TElement>是一個實體類型。你想要返回一個標量值。

返回的標量值在v3.5中被打破,但是您提到您正在使用EF v4,所以它應該可以工作。我的建議是通過EDM設計器構建標量函數導入,並使用生成的代碼來指導如何返回標量值。

+0

謝謝。我正在使用3.5,而不是4.0(XP上的VS 2008 sp1)。是否可以修改代碼並使其工作? – KentZhou 2009-09-03 20:00:04

+0

在3.5中,您只能映射返回實體類型的proc。 – 2009-09-03 20:39:23