0

Ich erstellte Prozedur für jeden DB-Typen, die von meiner Anwendung unterstützt werden. und in ihre Migrationsdateien hinzugefügt.wie gespeicherte Prozedur von datenbankunabhängige Anwendung aufgerufen wird C#, codefirst

ich kann erster App in meinem Code wie diese Art zwei gespeicherte Prozedur MSSQL nennt

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

zwei

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

aber wenn der db Providerwechsel zu mysql, gibt es Fehler.

Eine nicht behandelte Ausnahme des Typs 'MySql.Data.MySqlClient.MySqlException' aufgetreten in EntityFramework.dll Zusätzliche Informationen: Nur MySqlParameter Objekte ändern

und auch Oracle postgresql mysql-Provider können usw.

gespeichert werden können

Wie kann dieses Problem gelöst werden?

Ich möchte nicht, wenn Provider verwenden == mssql wenn Provider == mysql etc ...

dies meine Haupt ist Funktion

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

Antwort

0

ist dies die beste Verwendung ich finden kann. gibt es keine Möglichkeit, ohne Schaltergehäuse oder wenn sonst

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; 
     } 

    } 

Verbrauch:

worker.StoredProcedures.sp_uservirman(1, 2); 
Verwandte Themen