我有以下 SQL 程序并鍵入:
CREATE TYPE oprSlidingScaleProtocolEntrySet AS TABLE (
LowerValue DECIMAL(4,2) NOT NULL,
HigherValue DECIMAL(4,2),
UnitToDeliver DECIMAL(18,4) NOT NULL);
GO
CREATE PROCEDURE oprUpdateSlidingScaleProtocol
@PrescriptionId INT,
@newEntries oprSlidingScaleProtocolEntrySet READONLY
-- ...
使用物體框架的 EDMX,我應該能夠將程序作為 C# 函式匯入,包括引數。但這是 EDMX 提出的:
public virtual int oprUpdateSlidingScaleProtocol(Nullable<int> prescriptionId)
newEntries丟失了,也許匯入資料型別引數超出了 EF 的能力?我已經嘗試使用SqlCommand該類,但在運行時出現以下例外:
DataTable data = new DataTable("oprSlidingScaleProtocolEntrySet");
data.Columns.Add("LowerValue");
data.Columns.Add("HigherValue");
data.Columns.Add("UnitToDeliver");
// (populate table)
var sqlCmd = new SqlCommand("oprUpdateSlidingScaleProtocol", (SqlConnection)db.Database.Connection) {
CommandType = CommandType.StoredProcedure
};
sqlCmd.Parameters.AddWithValue("@prescriptionId", prescriptionId);
SqlParameter paramNewEntries = sqlCmd.Parameters.AddWithValue("@newEntries", data);
paramNewEntries.SqlDbType = SqlDbType.Structured;
sqlCmd.ExecuteNonQuery(); // RUNTIME ERROR: System.InvalidOperationException: 'ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.'
這很奇怪,但我不想弄亂胡思亂想的連接,所以我繼續使用自動生成的內部使用的相同方法撰寫自己的程序匯入DbContext:
((System.Data.Entity.Infrastructure.IObjectContextAdapter)db).ObjectContext.ExecuteFunction(
"oprUpdateSlidingScaleProtocol",
new ObjectParameter("prescriptionId", prescriptionId),
new ObjectParameter("newEntries", data)
);
但我得到以下例外:
System.InvalidOperationException: 'DbType'Object' 對 'newEntries' 物件上的 EntityParameter.DbType 屬性無效。
object我的代碼中唯一的s 是用于定義“資料”的那些:
foreach (SlidingScaleProtocol.Entry entry in formData.GetEntries()) {
var row = data.NewRow();
row.ItemArray = new object[] {
entry.LowerValue,
entry.HigherValue,
entry.UnitToDeliver
};
}
但是我需要這些物件來創建我的行!
關于該主題的檔案非常有限,所以我不確定我還應該嘗試什么。任何解決方案或想法?
uj5u.com熱心網友回復:
您必須在運行 SqlCommands 之前打開連接。
db.Database.Connection.Open();
var sqlCmd = new SqlCommand("oprUpdateSlidingScaleProtocol", (SqlConnection)db.Database.Connection) {
CommandType = CommandType.StoredProcedure
};
當 DbContext 被處置時,EF 將為您關閉連接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/327289.html
標籤:C# 。网 sql-server 数据表 edmx
上一篇:設定自定義列印機dpi
