直接執行存放區命令

您可以使用 Entity Framework 直接執行任意資料來源命令。

如果此類交易存在,則會在目前交易的內容中執行存放區命令。 如果在呼叫下列其中一個方法之前未先開啟透過 ObjectContext 的連接,Entity Framework 將在執行查詢之前開啟連接,然後在查詢執行完成之後關閉連接。 如需查詢執行的詳細資訊,請參閱物件查詢 (Entity Framework). 下列方法屬於 ObjectContext 型別。如需如何使用這些方法的範例,請參閱 HOW TO:直接針對資料來源執行命令。 方法:

具體化結果型別

針對會採用泛型結果型別參數的舊方法,TResult 可以做為基本型別、實體類型或任何自訂型別。 型別不必在 Entity Framework 概念模型中定義。 如果指定的型別屬於概念模型中未定義的類型,或不是基本型別,則下列對應慣例便適用。

型別:

  • 不得為抽象。

  • 必須具有預設的建構函式。

每個型別的屬性:

  • 必須具有 setter。

  • 必須對應至 CSDL 中的基本型別。

  • 必須對應至結果 DbDataReader 中的資料行名稱 (提供者實作會判斷資料行是否具有與屬性相同的名稱)。 如果型別屬性的名稱與 DbDataReader 的欄位不相符,Entity Framework 會具體化屬性的預設值 (如果該屬性定義於概念模型的話)。

使用參數化命令

參數化命令有助於防衛 SQL 插入式攻擊,此類攻擊會將命令「插入」至 SQL 陳述式並危及伺服器的安全。 參數化命令可確保接收自外部來源的值僅會以值的形式傳遞,而且不會當做 SQL 陳述式的一部分,藉此防衛 SQL 插入式攻擊。 因此,已插入值中的 SQL命令不會在資料來源執行, 而是只將其做為參數值評估。 除了安全性優點外,參數化命令也提供方便的方法,可供您安排以 SQL陳述式傳遞的值或傳遞到預存程序 (Stored Procedure) 的值。

當您呼叫 ExecuteStoreCommand 方法或其中一個 ExecuteQuery 多載 (ExecuteStoreQueryExecuteStoreQuery) 並傳遞 commandTextparameters 引數時,Entity Framework 會使用目前的物件內容連接來產生新的 DbCommand 執行個體,並將 CommandText ** 屬性設定為 commandText 而將 Parameters 屬性設定為 parametersparameters 值可以是 DbParameter 物件的陣列或參數值的陣列。 如果只提供值,則會根據陣列中的值順序建立 DbParameter 物件的陣列。 基礎提供者會根據 Common Language Runtime (CLR) 型別,判斷參數物件適用的 DbType。 每個參數物件的 ParameterName 是使用下列模型建置而成:"pn",其中 n 是參數引數的序數 (以零起始)。

例如,下列兩個方法呼叫是相等的:

context.ExecuteStoreQuery<Product>("select * from Products where pid = {0}", 1);

context.ExecuteStoreQuery<Product>("select * from Products where pid = @p0", new SqlParameter { ParameterName = "p0", Value = 1 });

另請參閱

工作

HOW TO:直接針對資料來源執行命令