1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/stoneson-cnative.dapper.utils

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

CNative.Dapper.Utils

Введение

CNative.Dapper.DbUtils — это ORM для .NetCore и .NetFramework, который поддерживает MySQL, SqlServer, Oracle, SqlLite, Npgsql, MsAccess.

Это миниатюрная библиотека классов ORM, построенная на основе Dapper, которая предоставляет базовый класс для доступа к данным, содержащий общие методы для добавления, удаления, изменения и запроса данных, а также разбиение на страницы. Она позволяет использовать лямбда-выражения для написания запросов и условий обновления, а также имеет T4-шаблоны для автоматического создания сущностей. Это избавляет от необходимости вручную создавать классы сущностей.

Архитектура программного обеспечения

Архитектура программного обеспечения описана в документации.

CNative.Dapper.Utils MyGet

Функции

  • Не требует настройки, готов к использованию сразу после установки.
  • Автоматическое сопоставление между таблицами базы данных и классами сущностей, автоматическое сопоставление первичных ключей.
  • Гибкие и удобные методы для выполнения общих операций с данными, таких как добавление, удаление, изменение и запрос, без необходимости писать SQL-запросы для каждой операции с одной таблицей.
  • Поддержка использования лямбда-выражений для определения условий запросов и обновлений, что позволяет автоматически генерировать безопасные параметризованные SQL-запросы.
  • Предоставляет методы для выполнения SQL-запросов и хранимых процедур, автоматически сопоставляя результаты с моделями, что более эффективно, чем использование DataSet.
  • Поддерживает частичное обновление полей, не обновляя неизменённые поля.
  • При изменении структуры таблицы достаточно перегенерировать классы сущностей, при этом нет необходимости переписывать код доступа к данным.
  • Комплексное модульное тестирование.
  • Поддержка объединения нескольких таблиц в запросах.
  • Поддержка разбиения на страницы при запросе данных.
  • Поддержка режима главный-подчиненный.
  • Совместимость с различными версиями .NET: net40;net461;netstandard2.1;netcoreapp3.1;net5.0.
  • В настоящее время поддерживается работа с MySQL, SqlServer, SqlServer2000, Oracle, SqlLite, Npgsql и MsAccess.
  • Динамические библиотеки, необходимые для работы с базами данных, такие как MySql.Data.dll, Oracle.ManagedDataAccess.dll, Devart.Data.Oracle.dll, System.Data.SqlClient.dll, System.Data.SQLite.dll, System.Data.OleDb.dll и Npgsql.dll, загружаются автоматически во время выполнения без необходимости явного указания ссылок на них.
  • Наличие обширного набора тестовых случаев.
  • Возможность добавления функций отслеживания скриптов.

Инструкция по установке

MyGet Pre-release feed: https://www.nuget.org/packages/CNative.Dapper.Utils/

Пакет NuGet Stable NuGet Pre-release Downloads MyGet
CNative.Dapper.Utils.Utils CNative.Dapper.Utils CNative.Dapper.Utils CNative.Dapper.Utils CNative.Dapper.Utils MyGet

Использование

appsettings.json

{
"AppSettings": {
"Title": "Test",
"Version": "1.2.1",
"AccessToken": "xxxxxx@abc.com"
},
"connectionStrings": [
{
"name": "BaseDb",
"CommandTimeout": 45,//секунд
"connectionString": "Data Source=.;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=xxxxxx",
"providerName": "System.Data.SqlClient"
},
{
"name": "Oracle",
"connectionString": "Data Source=xxxxxx;Persist Security Info=True;User ID=hispro;Password=xxxxxx",
"providerName": "System.Data.OracleClient"
}
...
]
}
``` ```
//测试用例

//脚本跟踪功能
SqlMapperTrace.SetMapperTrace((trec) => 
{
    Console.WriteLine(trec);
}, (trec) => 
{
    Console.WriteLine(trec);
});

[TestClass]
public class UnitTest461DbUtils
{
private ISqlBuilder DRY2 = null;
private ISqlBuilder sqlBuilder = null;

//在运行每个测试之前,使用 TestInitialize 来运行代码
[TestInitialize()]
public void MyTestInitialize()
{
DRY2 = new SqlBuilder("BaseDb");
sqlBuilder = new SqlBuilder("BaseDb");

}
[TestMethod]

//单表操作测试
[TestMethod]
public void TestSelectSqlBuilder1()
{
var lst = sqlBuilder.doSelect<Entity_persons>() //查询集合+排序+TOP
.Fields(s ⇒ new { s.id, s.name, s.adress }) //添加查询多个字段
.Top(8)
// .Where(w ⇒ w.id.Between(10, 20))
.OrderByDescending(d ⇒ d.createTime) //按列倒向排序
.Query(); //返回结果
var lst3 = sqlBuilder.doSelect<Entity_persons>() //取单行+排序
.Fields(s ⇒ new { s.id, s.name, s.adress }) //添加查询多个字段
.Where(w ⇒ w.id.Between(11, 20))
.OrderBy(d ⇒ d.id) //按列排序
.QuerySingle(); //返回结果

var lst4 = sqlBuilder.doSelect<Entity_persons>().Count(w ⇒ w.id.Between(11, 20)); //返回结果
}

[TestMethod]
public void TestInsertSqlBuilder1()
{
var jg = new Entity_DMJGXXB() { OrgId = 1002, jgdm = "56783", jgmc = "方舱" };

var ret = sqlBuilder.doDelete<Entity_DMJGXXB>() //实体删除
.Delete(jg)
.Exec;
ret = sqlBuilder.doInsert<Entity_DMJGXXB>() //插入实体
.Insert(jg)
.Execute();

ret = sqlBuilder.doDelete<Entity_DMJGXXB>() //表达式删除
.Where(s ⇒ s.OrgId == 1003)
.Execute();
ret = sqlBuilder.doInsert<Entity_DMJGXXB>() //表达式插入
.Insert(new Entity_DMJGXXB()
{
OrgId = 1003,
jgdm = "532236783",
jgmc = "方舱3",
CreateId = 0,
UpdateId = 0,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now
})
.Exec;

//表复制
var ret1 = sqlBuilder.doDelete<Entity_DMCZYJGDYB2>()
.Where(s ⇒ s.ksid == 1100453)
.Execute();

var ret22 = sqlBuilder.doInsert<Entity_DMCZYJGDYB2>() //表复制
.InsertSelect<Entity_DMCZYJGDYB>(s ⇒ new Entity_DMCZYJGDYB2()
{
OrgId = s.OrgId,
czyid = s.czyid,
czyjgdyid = s.czyjgdyid,
czyxm = s.czyxm,
jgmc = "fasdfafdsaf",
ksid = s.ksid,
ksmc = s.ksmc
}, s ⇒ s.ksid == 1100453)
.Exec;
}
[TestMethod]
public void TestUpdateSqlBuilder1()
{
var ret = sqlBuilder.doUpdate<Entity_DMJGXXB>()
.Set(s ⇒ new Entity_DMJGXXB()
{
jgdm = "5322336783",
jgmc = "fff232aaa",
CreateId = 0,
UpdateId = 0,
jgjpm = "ffff",
UpdateTime = DateTime.Now
})
.Where(s ⇒ s.OrgId == jg.OrgId)
.Exec;

jg.jgjpm = "345454";
ret = sqlBuilder.DoUpdate
.Update(jg, "jgjpm");

var ret1 = sqlBuilder.doDelete<Entity_DMJGXXB>()
.Where(s ⇒ s.OrgId == 1005)
.Execute();

//批量导入数据
ret = sqlBuilder.doInsert<Entity_DMJGXXB>()
    .BulkCopyData(new List<Entity_DMJGXXB>(){new Entity_DMJGXXB()
    {
        OrgId = 1004,
        jgdm = "532236784",
        jgmc = "方舱4",
        CreateId = 0,
        UpdateId = 0,
        CreateTime = DateTime.Now,
        UpdateTime = DateTime.Now
    },new Entity_DMJGXXB()
    {
        OrgId = 1005,
        jgdm = "532236785",
        jgmc = "方舱5",
        CreateId = 0,
        UpdateId = 0,
        CreateTime = DateTime.Now,
        UpdateTime = DateTime.Now
    },new Entity_DMJGXXB()
    {
        OrgId = 1006,
        jgdm = "532236786",
        jgmc = "方舱6",
        CreateId = 0,
        UpdateId = 0,
        CreateTime = DateTime.Now,
        UpdateTime = DateTime.Now
    } });

//更新或插入
var ret23 = sqlBuilder.DoUpdate
.UpdateOrInsert(jg, w ⇒ w.OrgId == jg.OrgId);

ret = sqlBuilder.doUpdate<Entity_DMJGXXB>()
.UpdateOrInsert(s ⇒ new Entity_DMJGXXB()
{
OrgId = 1006,
jgdm = "5322336783",
jgmc = "方舱232",
CreateId = 0,
UpdateId = 0,
jgjpm = "wsafdasfd",
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now
}, w ⇒ w.OrgId == 1006);
}

//多表操作测试
[TestMethod]
public void TestSelectFieldExprSqlBuilder1()
{
//查寻时加集合函数
var ret1 = sqlBuilder.doSelect<Entity_DMCZYJGDYB2>()
.Fields(f ⇒ new { czyjgdyid = f.czyjgdyid.SQL_MAX() })
.Where(s ⇒ s.ksid == 1100453)
.GetSingle<object>();

//查寻返回单行实体
 var ret2 = sqlBuilder.doSelect<Entity_DMJGXXB>()
               .Where(s =>

Этот текст написан на языке C#. ``` s.OrgId == 1008) .QuerySingle();

var ret2 = sqlBuilder.doSelect<Entity_DMCZYJGDYB2>() .Fields(f ⇒ new { f.czyid, f.czyxm, jgmc = f.jgmc.SQL_UCASE(), ksmc = f.jgmc.SQL_SUBSTR(2, 3) }) //.Where(s ⇒ s.ksid == 1100453) .Where(s ⇒ s.ksid == 1100453 && s.jgmc.SQL_UCASE() == "FASDFAFDSAF") .Query();

var ret3 = sqlBuilder.doSelect<Entity_DMCZYJGDYB2>() .Fields(f ⇒ new { f.ksid, f.ksmc, czyjgdyid = f.czyjgdyid.SQL_MAX() }) .Where(s ⇒ s.OrgId == 1001) .GroupBy(g ⇒ new { g.ksid, g.ksmc }) .OrderBy(g ⇒ g.ksid) .Query();

var ret4 = sqlBuilder.doSelect<Entity_DMCZYJGDYB2>() .Fields(f ⇒ new { f.ksid, f.ksmc, czyjgdyid = f.czyjgdyid.SQL_COUNT(), czyid = f.czyjgdyid.SQL_MAX() }) .Where(s ⇒ s.OrgId == 1001) .GroupBy(g ⇒ new { g.ksid, g.ksmc }) .Having(h ⇒ h.czyjgdyid.SQL_COUNT() > 3 && h.czyjgdyid.SQL_MAX() > 0) .OrderBy(g ⇒ g.ksid) .Query(); }


Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

CNative.Dapper.Utils — это ORM для .NetCore и .NetFramework, который поддерживает Mysql, SqlServer, Oracle и SqlLite. Развернуть Свернуть
MIT
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/stoneson-cnative.dapper.utils.git
git@api.gitlife.ru:oschina-mirror/stoneson-cnative.dapper.utils.git
oschina-mirror
stoneson-cnative.dapper.utils
stoneson-cnative.dapper.utils
master