2017-07-27 2 views
0

Ich versuche, Ausgabewert von dbcontext mit der Methode FromSql(...) zu erhalten.Entity-Framework-Kern Ausgabeparameter funktioniert nicht im Laden Verfahren mit FromSql-Methode (Linq)

Wenn ich es auf SSMS ausführen, funktioniert es, aber nicht in EF-Kern funktioniert.

Mein SP param:

@totalItems VARCHAR(MAX) OUTPUT 

ich andere params für lesbar entfernt haben und das Problem hinweisen. Die Datensätze kommen, aber der OUTPUT Parameter ist immer null.

Linq

IQeryable<T> = _context.Set<T>().FromSql("Sp_Todo @totalItems OUTPUT", // i also tried with OUT or without both Out/Output but no luck 
new SqlParameter("@totalItems", SqlDbType.Varchar) 
{ Direction = ParameterDirection.Output}); 
+0

Ihre Datenbank VARCHAR verwenden, während die C# Abfrage BigInt hat. – jdweng

+0

Selbst wenn ich 'SqlDbType.VarChar' setze, wird null zurückgegeben. – Robin

+0

versuchen Sie "string query =" anstelle von "var query =" – Ashu

Antwort

0

ich tun ‚keinen Zugriff auf Ihre gesamte Code haben, aber nichts gegen Ihre abfragbaren Quelle ausgeführt wird, bis Sie versuchen es aufzuzählen. Also, wahrscheinlich hat es nicht die gespeicherte Prozedur ausgeführt, wenn Sie versucht haben, die Ausgabe zu bekommen.

Um sofortige Abfrageauswertung zwingen Sie es tun können:

IQueryable<T> foo = _context.Set<T>().FromSql("Sp_Todo @totalItems OUTPUT", new SqlParameter("@totalItems", SqlDbType.Varchar) { Direction = ParameterDirection.Output }); 
//totalItems output still null 
var bar = foo.ToList() 
//totalItems output not null anymore 

Hier ist, wie ich es so mache:

var _companyCode = new SqlParameter("CompanyCode", "HST"); 
var _sMsg = new SqlParameter("sMsg", "") 
{ 
    Direction = ParameterDirection.Output, 
    SqlDbType = SqlDbType.VarChar 
}; 

var sql = "exec temp_get_company @CompanyCode, @sMsg OUTPUT"; 

var result = context.Set<Company>().FromSql(sql, _companyCode, _sMsg).ToList(); 

var yourOutput = _sMsg.Value.ToString(); 
Verwandte Themen