gpt4 book ai didi

mysql - 如何从独立于数据库的应用程序调用存储过程 C#,codefirst

转载 作者:行者123 更新时间:2023-11-29 19:37:49 26 4
gpt4 key购买 nike

我为我的应用程序支持的每种数据库类型创建了过程。并添加到他们的迁移文件中。

我可以在我的代码优先应用程序中调用存储过程MSSQL,就像这两种类型一个

worker.StoredProcedures.ExecuteWithStoreProcedure("sp_userVirman @ResourceUserID,@targetUserID", 
new SqlParameter("ResourceUserID",DbType.Int64) { Value = 1 },
new SqlParameter("targetUserID", DbType.Int64) { Value = 2 });

两个

worker.StoredProcedures.ExecuteWithStoreProcedure(string.Format("sp_userVirman {0},{1}", 1, 2));

但是当数据库提供程序更改为mysql时,会出现错误。

EntityFramework.dll 中发生“MySql.Data.MySqlClient.MySqlException”类型的未处理异常附加信息:只能存储 MySqlParameter 对象

提供商还可以更改 oracle postgresql mysql 等

如何解决这个问题?

我不想使用 ifprovider==mssql ifprovider==mysql 等...

这是我的主要功能

 public void ExecuteWithStoreProcedure(string query, params object[] parameters)
{
_dbContext.Database.ExecuteSqlCommand(query, parameters);
}

最佳答案

这是我能找到的最好的用途。没有 switch case 或 if else 就没有办法

public void sp_uservirman(Nullable<int> resourceUserID, Nullable<int> targetUserID)
{
switch (GlobalData.CustomerDataSourceType)
{
case ContextFactory.DataSourceTypes.None:
break;
case ContextFactory.DataSourceTypes.MSSQL:
SqlParameter param= new SqlParameter("@resourceuserıd",resourceUserID);
SqlParameter param1= new SqlParameter("@targetUserID",targetUserID);
_dbContext.Database.ExecuteSqlCommand("sp_uservirman @resourceuserıd,@targetUserID", param, param1);
break;
case ContextFactory.DataSourceTypes.MySQL:

MySqlParameter param3 = new MySqlParameter("@resourceuserıd", resourceUserID);
MySqlParameter param4 = new MySqlParameter("@targetUserID", targetUserID);


_dbContext.Database.ExecuteSqlCommand("CALL sp_uservirman (@resourceuserıd,@targetUserID)", param3, param4);
break;
case ContextFactory.DataSourceTypes.ORACLE:

string query = string.Format("BEGIN SP_USERVIRMAN ({0},{1}) ; END;", resourceUserID, targetUserID);
_dbContext.Database.ExecuteSqlCommand(query);

break;
default:
break;
}

}

用法:

 worker.StoredProcedures.sp_uservirman(1, 2);

关于mysql - 如何从独立于数据库的应用程序调用存储过程 C#,codefirst,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41483017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com