1
votes

Exécution de Raw SQL avec Entity Framework Core

Ci-dessous, je peux avoir une condition pour exécuter view / table, qui se chargerait dans la classe AccountDataModel.

 dbcontext.AccountDataModel.FromSql($"select * from account where id=123").FirstOrDefault();

Comment puis-je récupérer sans utiliser de modèle de classe, si je veux simplement récupérer 1 ou 2 colonnes

exemple: sélectionnez le nom du compte où id = 123

Ai-je toujours besoin d'un modèle de classe?


0 commentaires

3 Réponses :


0
votes

Oui. comme ceci:

var account = dbcontext.AccountDataModel.FromSql(@"select a.id, a.name from account a where a.id=123");

source: FromSql pour le type non d'entité


2 commentaires

Je ne veux pas utiliser AccoutDataModel, je sais que je peux mapper de sql à ma classe POCO (comme je l'ai mentionné dans l'exemple) Je veux récupérer un exemple de colonne 'nom' à var name = dbcontext.XXXX ....


vous voulez dire quelque chose comme ça: learnentityframeworkcore. com /… ? (section Exploiter ADO.NET via la propriété Context.Database)



0
votes

Ceci interroge la base de données

 var name = dbcontext.GetDBConnection().Query("select name from account where id=123").FirstOrDefault();


2 commentaires

@Ben Réponse mise à jour


Je ne parviens pas à obtenir l'instance GetDbConnection () et si j'utilise dbcontext.Database.GetDbConnection (), alors Query (..) est introuvable. Dois-je installer le package NuGet?



1
votes

ADO.NET fonctionne dans EF Core =)

using Microsoft.EntityFrameworkCore;
using System.Data.Common;
using System.Data.SqlClient;
using System;

    public void ExampleMethod(DbContext context)
    {
        SomeObjectResult result = null;
        DbCommand cmd = context.Database.GetDbConnection().CreateCommand();
        cmd.CommandText = "Select C.ID, C.CarModelID as ModelID, C.VIN, C.RegNumber,cast(C.CountValue as int) as Course,A.BrandID from   A inner join C on A.ID = C.KeyID  Where A.ID = @appID";
        cmd.Parameters.Add(new SqlParameter("@appID", appointmentID));
        if (cmd.Connection.State != ConnectionState.Open)
        {
            cmd.Connection.Open();
        }
        using (var reader = await cmd.ExecuteReaderAsync())
        {
            if (reader.Read())
            {
                result = new SomeObjectResult()
                {
                    BrandID = (int)reader["BrandID"],
                    Course = (int)reader["Course"],
                    ID = (int)reader["ID"],
                    ModelID = (int?)reader["ModelID"],
                    RegNumber = (string)reader["RegNumber"],
                    VIN = (string)reader["VIN"]
                };
            }
        }
    }


0 commentaires