web-dev-qa-db-fra.com

Quel ORM devrais-je utiliser pour .Net en 2016 pour parler au serveur SQL?

La plupart de mon expérience côté serveur est avec météore ou Rails nodeJS, donc je n'ai pas encore une mine de connaissances .Net. Dans Rails, il est assez facile de choisir ORM, car ActiveRecord est le seul jeu en ville, semble-t-il. Mon approche consistait généralement à interroger tout ce que vous pouviez utiliser à l'aide de l'ORM. Si vous ne parvenez pas à l'en extraire, passez au SQL brut. 

Cependant, j'essaie de lire des tutoriels et des leçons sur l'interrogation de mes bases de données dans .NET 4.5 ou des applications plus récentes et je suis confus quant à l'avenir. Je vois des tutoriels dans ce qui suit

  • Syntaxe Linq Lambda
  • Syntaxe de Linq Query 
  • Cadre d'entité 

Quelle est l'ORM suggéré pour les applications .net modernes? Il semble que je puisse faire des opérations de base sur CRUD dans tout ce qui précède. Mais sera-t-on mieux adapté pour dire, par exemple, les jointures entre les tables? Rappelez-vous que je ne prévois jamais que d'interroger mes bases de données serveur Microsoft SQL pour mes solutions .net. 

ce qui m'a vraiment dérouté, c'est de lire qu'EF a remplacé linq, mais que EF l'utilise également. Donc, quand je vois un exemple pour dire sélectionner toutes les colonnes, je ne sais pas si j'utilise une syntaxe du passé ou du futur. Aussi, juste en regardant le code, je ne peux pas dire si c'est linq ou EF. Je peux dire si sa requête ou sa syntaxe lambda cependant. 

12
ngnewb

Les options que vous avez mentionnées ne sont pas toutes des ORM, dans cette 3 seule ORM est EF. Il existe d’autres ORM populaires dans .net, notamment:

  • NHibernate
  • LLBLGen pro
  • ActiveRecord

La plupart d'entre eux supportent LINQ. EntityFramework est le plus jeune, mais son intégration à VS et sa disponibilité immédiate en font l’ORM le plus populaire en .net et il a remplacé LINQ aux entités et non à LINQ lui-même. msdn peut être utilisé avec différentes sources de données.

LINQ est un ensemble de fonctionnalités qui étend les capacités de requête puissantes à la syntaxe de langage de C #. LINQ introduit le standard, facile à apprendre modèles pour l'interrogation et la mise à jour des données, et la technologie peut être étendu pour prendre en charge potentiellement tout type de magasin de données. Le net La structure inclut les assemblys de fournisseur LINQ qui permettent l'utilisation de LINQ avec des collections .NET Framework, bases de données SQL Server, ADO.NET Jeux de données et documents XML.

Il existe deux syntaxes différentes à utiliser LINQ, généralement appelées syntaxe Fluent et syntaxe Query.

Si votre version de .net, comme vous l'avez mentionné, recommande d'utiliser EF avec une syntaxe fluide, ce serait le moyen le plus rapide de lancer une requête sur une base de données en .net.

9
VahidNaderi

La réponse courte est Entity Framework. 

Je pense que ce qui vous dérange, c'est que vous pouvez utiliser la syntaxe Linq Lambda et Linq Query avec Entity Framework. Mais le futur (à mon avis) est l’API Fluent.

J'utilise Entity Framework 7 (version préliminaire) et j'ai l'impression qu'il est axé sur l'API Fluent. Ce qui me convient car je l’aime beaucoup mieux que la syntaxe Linq. 

4
Clint B

Essayez Vega https://github.com/aadreja/vega il est simple à utiliser et l’un des plus rapides ORM .net avec de nombreuses fonctionnalités intéressantes.

Voici les étapes pour commencer: -

1) Créez une classe d’entité dérivée de Vega.EntityBase Exemple: -

[Table(NeedsHistory = true)]
public class Country : EntityBase
{
    [PrimaryKey(true)]
    public int Id { get; set; }
    public string Name { get; set; }
    public string ShortCode { get; set; }
}

2) Effectuer des opérations CRUD

Insertion - Créez simplement des entités et définissez les propriétés pour l'insertion. Créez un objet de connexion, transmettez-le au référentiel et appelez la méthode Add qui renverra l'ID du nouvel enregistrement créé.

Country country = new Country()
    {
        Name = "India",
        ShortCode = "IN",
        CreatedBy = 1  //user id created record
    };

using (SqlConnection connection = new SqlConnection(conString))
{
     Repository<Country> countryRepo = new Repository<Country>(connection);
     int result = (int)countryRepo.Add(country);
}

Mise à jour - Pour mettre à jour l'utilisation des enregistrements, méthode Update du référentiel

City city = new City()
{
    Id = 1,
    Name = "Ahmedabad",
    State = "GU",
    CountryId = 1,
    Longitude = 102.23m,
    Latitude = 124.23m,
    UpdatedBy = 1
};

using (SqlConnection con = new SqlConnection(connectionString))
{
     Repository<City> cityRepo = new Repository<City>(con);
     bool result = cityRepo.Update(city);
}

Lire la liste - Lit tous les enregistrements avec les critères spécifiés et les convertit en objet énumérable pouvant être converti en liste.

//read all records
using (SqlConnection con = new SqlConnection(connectionString))
{
     Repository<City> cityRepo = new Repository<City>(con);
     List<City> cityList  = cityRepo.ReadAll().ToList();
}

//read all with specified dynamic criteria
using (SqlConnection con = new SqlConnection(connectionString))
{
     Repository<City> cityRepo = new Repository<City>(con);
     List<City> cityList = cityRepo.ReadAll("Name=@Name", new { Name = "Ahmedabad" }).ToList(); //Dynamic criteria
}

Reportez-vous à plus de documentation sur https://github.com/aadreja/vega/wiki/Repository

0
aadreja