我不知道如何使用Entity Framework运行存储过程。我试过了:
public static string GetGroupModFunc(string group_mod_id)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["QLNTEntities"].ToString());
conn.Open();
SqlCommand cmd = new SqlCommand("GET_GROUP_PERMIT", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@GID", group_mod_id);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();
return "Test connection";
}
我的连接字符串实体客户端
<add name="QLNTEntities"
connectionString="metadata=res://*/DATA.ModelQLNT.csdl|res://*/DATA.ModelQLNT.ssdl|res://*/DATA.ModelQLNT.msl;provider=System.Data.SqlClient;provider connection string="data source=.\SQLEXPRESS;initial catalog=QLNT;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
运行后我收到错误
不支持System.ArgumentException关键字&#39;元数据&#39;
谢谢你们。
答案 0 :(得分:2)
在您的edmx文件中,打开模型浏览器,然后选择Add Function Import,EF将相应地为您的存储过程生成正确的代码和模型。
答案 1 :(得分:1)
首先使用代码,我从存储库中使用以下方法;
public async Task<int> Query(string query, params object[] parameters)
{
return await this._db.Database.ExecuteSqlCommandAsync(query, parameters);
}
this._db是你的datacontext。
然后这样称呼它;
string query = "exec <StoredProcName> @Param1, @Param2";
Task<int> a = this._repository.Query(query,
new SqlParameter("@Param1", "foo"),
new SqlParameter("@Param2", "bar"));
答案 2 :(得分:0)
从数据库生成模型时,您可以直接调用存储过程,如下所示:
DbContextObject.YourStoredProcedureName(parameters)
另一种选择是,
Db.ExecuteFunction("Stored Procedure Name", "Parameter Collection");
其中Db是数据库上下文对象。
希望这会有所帮助..!
答案 3 :(得分:-2)
好吧,我找到了答案。
public static string GetGroupModFunc(string group_mod_id)
{
var sconnect = ((SqlConnection)db.Database.Connection);
sconnect.Open();
SqlCommand cmd = new SqlCommand("GET_GROUP_PERMIT", sconnect);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@GID", group_mod_id);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
sconnect.Close();
//It's flexible , because it's return DataTable , not entity , You can use avery where
// ok the result bind to datatable .I'll convert them to JSON
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
return JsonConvert.SerializeObject(rows);
}
你可以尝试一下,并给我一些问题。谢谢你们。