2013-10-23 41 views
2

我在我的項目中使用Entity Framework v4.0來連接到數據庫。我處於將List作爲輸入參數傳遞給存儲過程的情況,並在SP中執行一些操作並返回List作爲SP結果。我知道表值參數是一個選項。但經過一番調查後,我發現在Entity Framework中不可能使用Table Valued參數。有沒有其他方式沒有使用表值參數通過實體框架來做到這一點?在實體框架中使用SQL表值參數

+0

有沒有,你可以升級到EF5任何機會呢? [它支持](http://msdn.microsoft.com/en-us/data/hh859577.aspx) – MaxSC

回答

4

,您仍然可以通過一個TVP存儲過程即使您正在使用實體框架。

例子:

// Create metadata records 
IEnumerable<SqlDataRecord> sqlDataRecords = new List<SqlDataRecord>(); 

// Create a list of SqlDataRecord objects from your list of entities here 

SqlConnection storeConnection = (SqlConnection)((EntityConnection)ObjectContext.Connection).StoreConnection; 
try 
{ 
    using (SqlCommand command = storeConnection.CreateCommand()) 
    { 
     command.Connection = storeConnection; 
     storeConnection.Open(); 

     SqlParameter[] sqlParameters = parameters.ToArray(); 
     command.CommandText = YourStoredProcedureName; 
     command.CommandType = CommandType.StoredProcedure; 
     command.Parameters.Add(new SqlParameter("YourTVPName", SqlDbType.Structured) 
          { 
           Value = sqlDataRecords, 
           TypeName = "dbo.Your_Table_Type" 
          }); 

     using (DbDataReader reader = command.ExecuteReader()) 
     { 
      // Read results 
     } 
    } 
} 
finally 
{ 
    storeConnection.Close(); 
} 
+0

Thankssss !!!!這有助於....但如何從存儲過程中取回列表? ExecuteReader做到了嗎? – Sadhurthan

+0

看到這裏的信息閱讀的結果:http://msdn.microsoft.com/en-us/library/haa3afyz.aspx – mayabelle

+0

感謝洛特伴侶!!!!!!!!!!! – Sadhurthan