अभी के लिए जब तक वहाँ कुछ मैं एक कमांड का इस्तेमाल किया और इसे मैन्युअल रूप से नक्शा
using (var command = this.DbContext.Database.GetDbConnection().CreateCommand())
{
command.CommandText = "SELECT ... WHERE ...> @p1)";
command.CommandType = CommandType.Text;
var parameter = new SqlParameter("@p1",...);
this.DbContext.Database.OpenConnection();
using (var result = command.ExecuteReader())
{
while (result.Read())
{
.... // Map to your entity
}
}
}
हैं EFCore से नया है:
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.EntityFrameworkCore.Storage;
using System.Threading;
using System.Threading.Tasks;
namespace Microsoft.EntityFrameworkCore
{
public static class RDFacadeExtensions
{
public static RelationalDataReader ExecuteSqlQuery(this DatabaseFacade databaseFacade, string sql, params object[] parameters)
{
var concurrencyDetector = databaseFacade.GetService<IConcurrencyDetector>();
using (concurrencyDetector.EnterCriticalSection())
{
var rawSqlCommand = databaseFacade
.GetService<IRawSqlCommandBuilder>()
.Build(sql, parameters);
return rawSqlCommand
.RelationalCommand
.ExecuteReader(
databaseFacade.GetService<IRelationalConnection>(),
parameterValues: rawSqlCommand.ParameterValues);
}
}
public static async Task<RelationalDataReader> ExecuteSqlQueryAsync(this DatabaseFacade databaseFacade,
string sql,
CancellationToken cancellationToken = default(CancellationToken),
params object[] parameters)
{
var concurrencyDetector = databaseFacade.GetService<IConcurrencyDetector>();
using (concurrencyDetector.EnterCriticalSection())
{
var rawSqlCommand = databaseFacade
.GetService<IRawSqlCommandBuilder>()
.Build(sql, parameters);
return await rawSqlCommand
.RelationalCommand
.ExecuteReaderAsync(
databaseFacade.GetService<IRelationalConnection>(),
parameterValues: rawSqlCommand.ParameterValues,
cancellationToken: cancellationToken);
}
}
}
}
इसका इस्तेमाल करने के लिए का एक उदाहरण है एसक्यूएल इंजेक्शन से बचने के लिए एसक्लपैमरेटर को आज़माएं।
dbData.Product.FromSql("SQL SCRIPT");
FromSql पूर्ण क्वेरी के साथ काम नहीं करता है। उदाहरण यदि आप एक WHERE खंड शामिल करना चाहते हैं तो इसे अनदेखा कर दिया जाएगा।
कुछ लिंक:
Executing Raw SQL Queries using Entity Framework Core
Raw SQL Queries
मैं SqlQuery को बहुत याद करूँगा और मेरे डीबीकॉन्टेक्स्ट में कस्टम क्लास को मैप करना नहीं चाहता हूं, जब मुझे वास्तव में एक विशिष्ट उपयोग मामले के लिए एक साधारण डीटीओ की आवश्यकता होती है। मैंने इस सुविधा को ईएफ कोर में वापस जोड़ने का अनुरोध करने के लिए एक उपयोगकर्ता आवाज बनाई है कि अगर कोई इस सुविधा को वापस लेना चाहे तो कोई भी वोट दे सकता है: https: //data.uservoice।कॉम/मंच/72025-इकाई-ढांचे-सुविधा-सुझाव/सुझाव/13183638-ऐड-डीबीकॉनटेक्स्ट-डेटाबेस-एसक्लक्वायरी-टू-एंट्री-फ्रेमवायर –
https://github.com/aspnet/EntityFramework/issues/1862 के अनुसार, अब यह ईएफ कोर 1.2 और/या 1.1.0-पूर्वावलोकन 1 –