Introduction et exemple du cadre ORM ASmile de niveau moucheron

Un cadre ORM simple, facile à utiliser, efficace et flexible, avec un code amical,开源 et facile à étendre;

nuget : Install-Package ASmile.ORM

Preuve d'implémentation actuelle : prise en charge de SQLIte , SQLServer, MySql, Oracle;

Pas de préambule, passons directement aux exemples,

Tout d'abord, créer un objet de base de données :

DbContext db = new DbContextDebug(DbType.SQLServer, "Server=.;Database=asmile-exemples;Connection Trusted=True;");

Nouveau 1, Utilisation du générateur de code pour générer une classe d'entité nouvelle

var r =
db.Insert(new Test01
{
    Id = 1,
    Nom = "Jean",
    Age = 19,
    DateNaissance = new DateTime(1999, 9, 9),
    Solde = 8765.43m,
    Remarque = ""
});
Console.WriteLine($"Nouveau terminé, \nSqlContent:\n{r.SqlContent}");

Résultat de la console (seulement en mode débogage) :

Nouveau 2, Utilisation de l'objet anonyme

var r =
db.Insert("Test01",
new
{
    Id = 2,
    Nom = "Marc",
    Age = 19,
    DateNaissance = new DateTime(1990, 5, 5),
    Solde = 9000,
    DateAjout = DateTime.Now,
    Remarque = "Nouveau avec objet anonyme"
});
Console.WriteLine($"Nouveau terminé, \nSqlContent:\n{r.SqlContent}");

Nouveau 3, Affecter uniquement les champs spécifiés, les autres valeurs restent par défaut. Si l'objet anonyme ou la classe d'entité n'affecte pas une propriété, elle sera ignorée

var r =
db.Insert(
new Test01
{
    Id = 3,
    Nom = "Pierre",
    //Age non affecté,
    DateNaissance = new DateTime(1990, 5, 5),
    Solde = 9000,
    DateAjout = DateTime.Now,
    Remarque = "Age non initialisé"
});
Console.WriteLine($"Nouveau terminé, \nSqlContent:\n{r.SqlContent}");

Nouveau 4, Ensertion en lot, l'efficacité de l'insertion en lot est uniquement prise en charge par SQLServer et MySql, et les champs non nuls doivent être initialisés

List<Test01> listeAjout = new List<Test01>();
for (int i = 0; i < 20; i++)
{
    listeAjout.Add(new Test01
    {
        Id = 4 + i,
        Nom = $"Nom {i + 1}",
        Age = 22,
        DateNaissance = new DateTime(2000, 8, 8),
        Solde = 1999.56m,
        DateAjout = DateTime.Now,
        Remarque = "Nouveau en lot"
    });
}
db.InsertBulk(listeAjout);
Console.WriteLine($"Nouveau en lot terminé");

Modification 1, Objet d'entité, mise à jour de la clé primaire

//Mettre à jour l'Id 5 pour le nom en "Liu Dehua"
var r =
db.Update(new Test01
{
    Id = 5,
    Nom = "Liu Dehua",
    Remarque = ""
});
Console.WriteLine($"Mise à jour terminée, \nSqlContent:\n{r.SqlContent}");

Modification 2, à travers l'expression lambda pour la condition de mise à jour

//Mise à jour à travers l'expression lambda
var r =
db.Update(
new Test01
{
    Solde = 500,
    Nom = "Liu Xuan",
    Remarque = "Mise à jour avec lambda"
}, s => s.Nom == "Nom 3");
Console.WriteLine($"Mise à jour terminée, \nSqlContent:\n{r.SqlContent}");

Modification 3, Mise à jour via l'expression SQL

//Mise à jour via l'expression SQL
var r =
db.UpdateByExpr<Test01>(s => s.Age < 20,
"Solde = Solde + 250"
);
Console.WriteLine($"Mise à jour terminée, \nSqlContent:\n{r.SqlContent}");

Suppression 1, Par l'objet d'entité, suppresion de la clé primaire

//Suppression par l'objet d'entité principal
var r =
db.Delete(new Test01 
{ 
    Id = 7
});
Console.WriteLine($"Suppression terminée, \nSqlContent:\n{r.SqlContent}");

Suppression 2, Suppression via l'expression lambda

//Suppression via l'expression lambda
var r =
db.Delete<Test01>(s=>s.Nom == "Nom 10");
Console.WriteLine($"Suppression terminée, \nSqlContent:\n{r.SqlContent}");

Recherche 1, Expression lambda, recherche de la première ligne, retourne un objet d'entité

// Recherche par expression lambda de la première ligne
var r = db.Query<Test01>(s => s.Id == 5);
var m = r.ToEntity();
Console.WriteLine($"Recherche terminée, \nSqlContent:\n{r.SqlContent}");

Recherche 2, Recherche par liste via l'expression lambda

// Recherche par liste via l'expression lambda
var r = db.Query<Test01>(s => s.WEx_Like(s.Nom, "Nom%") && s.Id < 16);
var m = r.ToList();
Console.WriteLine($"Recherche terminée, \nSqlContent:\n{r.SqlContent}");

Recherche 3, Recherche flexible via l'objet Query

// Recherche flexible via l'objet Query
var query = db.CreateQuery<Test01>();
string nom = "nom%";
if (nom != "")
{
    query.WhereAnd(s => s.WEx_Like(s.Nom, $"{nom}"));
}
var r = db.Query(query);
var m = r.ToList();
Console.WriteLine($"Recherche terminée, \nSqlContent:\n{r.SqlContent}");

Recherche 4, Recherche flexible via le délégué Query

// Utilisation du délégué Query pour une recherche flexible
string nom = "nom%";
var r = db.Query<Test01>(query =>
{
    if (nom != "")
    {
        query.WhereAnd(s => s.WEx_Like(s.Nom, $"{nom}"));
    }
});
var m = r.ToList();
Console.WriteLine($"Recherche terminée, \nSqlContent:\n{r.SqlContent}");

Recherche 5, Recherche en pagination, avec la même méthode de recherche, affecter les paramètres PageNo et PageSize

// Recherche en pagination
string nom = "nom%";
var r = db.Query<Test01>(query =>
{
    query.PageNo = 2;
    query.PageSize = 6;
    if (nom != "")
    {
        query.WhereAnd(s => s.WEx_Like(s.Nom, $"{nom}"));
    }
    query.OrderBy(s => s.Nom); // Tri par nom
});
var m = r.ToList();
Console.WriteLine($"Recherche terminée, \nSqlContent:\n{r.SqlContent}");

Si c'est la première page, SQLServer simplifiera l'écriture de la requête SQL, par exemple :

Recherche 6, Utilisation de la requête SQL textuelle (outil SQL intégré)

//Utilisation de la requête SQL textuelle (outil SQL intégré)
var r =
db.Query(sql =>
{
    int ageMin = 15;
    int ageMax = 22;
    sql.AddSQLParam("select * from Test01 where age > {0} and age < {1}", ageMin, ageMax);
});
var rDonnees = r.ToDataTable();  // Retourne un format DataTable            
var rListe = r.ToList<Test01>(); // Ici la liste générique peut utiliser n'importe quel type            
Console.WriteLine($"Recherche terminée, \nSqlContent:\n{r.SqlContent}");

Procédure stockée 1, Paramètres anonymes

//Exécution d'une procédure stockée
List<Test01> rListe =
da.ExecProcedure("P_Query01", new
{
    Nom = "Jean"
}).ToList<Test01>();

Console.WriteLine($"Exécution de la procédure stockée terminée");

Procédure stockée 2, Exécution

//Exécution de la procédure stockée
da.ExecProcedure("P_Exec01", new
{
    Nom = "Jean"
}).Exec();

Console.WriteLine($"Exécution de la procédure stockée terminée");

Procédure stockée 3, Exécution d'une procédure stockée avec paramètres de sortie

-- Procédure stockée avec paramètre de sortie Créer la procédure P_Exec02
    @Nom varchar(20),
    @MsgSortie varchar(50)  = null out
as

delete from Test01 where [Nom] = @Nom

set @MsgSortie = 'Supprimé, ' + @Nom

// Définition de l'objet de sortie
class SortieDonnees
{
    public string MsgSortie { set; get; } // Paramètre de sortie
}

//Exécution de la procédure stockée et récupération du paramètre de sortie
var retProc =
da.ExecProcedure("P_Exec02", new
{
    Nom = "Jean"
});
SortieDonnees sortie = new SortieDonnees();
retProc.Exec(sortie);
var msg = sortie.MsgSortie;

Console.WriteLine($"Exécution de la procédure stockée terminée, {msg}");

Procédure stockée 4, Exécution d'une procédure stockée et récupération du paramètre de sortie via un objet anonyme

// Exécution de la procédure stockée et récupération du paramètre de sortie via un objet anonyme
var retProc =
da.ExecProcedure("P_Exec02", new
{
    Nom = "Jean"
});
retProc.Exec(new { MsgSortie = "" });
var msg = retProc.Sortie.MsgSortie;

Console.WriteLine($"Exécution de la procédure stockée terminée, {msg}");

Adrese du projet开源 : https://gitee.com/zhcun/asmile-orm

Étiquettes: ORM C# base de données SQL MySQL

Publié le 13 septembre à 08h54