目錄
介紹
支持的數據庫
如何使用
數據庫配置
使用方法
對象映射
子表映射
基本操作
數據聚合
Join表查詢
執行SQL
單元測試
性能測試
Light.Data?是一個基于dotnet standard 2.0的輕量級ORM框架??,通過實體模型類??Attribute?或配置文件關聯數據表。使用核心類??DataContext?在表上進行??CURD?操作。
PM> Install-Package Light.Data
數據庫 | 介紹 |
SqlServer的 | 需要安裝??nuget?安裝??Light.Data.Mssql?庫,支持SqlServer 2008或以上版本 |
Mysql的 | 需要安裝??nuget?安裝??Light.Data.Mysql?庫,支持Mysql5.5或以上版本 |
Postgre | 需要安裝??nuget?安裝??Light.Data.Postgre?庫,支持PostgreSQL9.3或以上版本 |
?
{"lightData": {"connections": [{"name": "mssql_db","connectionString": "...","providerName": "Light.Data.Mssql.MssqlProvider, Light.Data.Mssql"},{"name": "mysql_db","connectionString": "...","providerName": "Light.Data.Mysql.MysqlProvider, Light.Data.Mysql"}]}
}
// direct use
DataContext context = new DataContext("mssql");// create subclass
public class MyDataContext : DataContext
{public MyDataContext() : base("mssql"){}
}// create subclass with options
public class MyDataContext : DataContext
{public MyDataContext(DataContextOptions<MyDataContext> options) : base(options){}
}// direct config connect string and params (IServiceCollection)
service.AddDataContext<MyDataContext>(builder => {builder.UseMssql(connectionString);builder.SetTimeout(2000);builder.SetVersion("11.0");
}, ServiceLifetime.Transient);// use default configuration file to config (IServiceCollection)
service.AddDataContext<MyDataContext>(DataContextConfiguration.Global, config => {config.ConfigName = "mssql";
}, ServiceLifetime.Transient);
[DataTable("Te_User", IsEntityTable = true)]
public class TeUser
{/// <summary>/// Id/// </summary>/// <value></value>[DataField("Id", IsIdentity = true, IsPrimaryKey = true)]public int Id{get;set;}/// <summary>/// Account/// </summary>/// <value></value>[DataField("Account")]public string Account{get;set;}/// <summary>/// Telephone/// </summary>/// <value></value>[DataField("Telephone", IsNullable = true)]public string Telephone{get;set;}....
}
在派生類TeUserAndExtend中添加類型為TeUserExtend的公共屬性Extend,并添加特性RelationFieldAttribute。在查詢TeUserAndExtend中,還將檢測關聯的TeUserExtend?數據。并且還支持一對多。java orm框架有哪些、
[DataTable("Te_UserExtend", IsEntityTable = true)]
public class TeUserExtend
{[DataField("Id", IsIdentity = true, IsPrimaryKey = true)]public int Id{get;set;}[DataField("MainId")]public int MainId{get;set;}[DataField("Data", IsNullable = true)]public string Data{get;set;}
}public class TeUserAndExtend : TeUser
{[RelationField("Id", "MainId")]public TeUserExtend Extend{get;set;}
}
var context = new DataContext();
// query single data
var item = context.Query<TeUser>().Where(x => x.Id == 10).First();
// query collection datas
var list = context.Query<TeUser>().Where(x => x.Id > 10).ToList();
// create date
var user = new TeUser() {Account = "foo",Password = "bar"
};
context.Insert(user);
// update data
user.Password = "bar1";
context.Update(user);
// delete data
context.Delete(user);
// basic
var list = context.Query<TeUser> ().Where (x => x.Id >= 5).GroupBy (x => new LevelIdAgg () {LevelId = x.LevelId,Data = Function.Count ()}).ToList ();// date format
var list = context.Query<TeUser> ().GroupBy (x => new RegDateFormatAgg () {RegDateFormat = x.RegTime.ToString("yyyy-MM-dd"),Data = Function.Count ()}).ToList ();
// inner join
var join = context.Query<TeUser> ().Join<TeUserExtend>((x,y) => x.Id == y.Id);// aggregate data join entity table
var join = context.Query<TeMainTable>().GroupBy(x => new {MId = x.MId,Count = Function.Count(),}).Join<TeSubTable>((x, y) => x.MId == y.Id);
// basic parameter
var sql = "update Te_User set NickName=@P2 where Id=@P1";
var ps = new DataParameter[2];
ps[0] = new DataParameter("P1", 5);
ps[1] = new DataParameter("P2", "abc");
var executor = context.CreateSqlStringExecutor(sql, ps);
var ret = executor.ExecuteNonQuery();// object parameter
var sql = "update Te_User set NickName={nickname} where Id={id}";
var executor = context.CreateSqlStringExecutor(sql, new { nickname = "abc", id = 5 });
var ret = executor.ExecuteNonQuery();
該項目使用xUnit進行單元測試,測試代碼地址:https://github.com/aquilahkj/Light.Data2/tree/master/test
每個數據庫有超過300組測試,包含1,000個案例,涵蓋了大部分代碼。
目前只在同一臺計算機上使用EF Core,為Linux做Docker Sql Server 2017做簡單的CURD性能測試代碼地址https://github.com/aquilahkj/OrmTest
1000次CUD和單個數據查詢
共有5輪,每輪1000次CUD和1000次數據查詢
EF測試結果
Light.Data測試結果
從比較來看,查詢性能幾乎相同,插入性能Light.Data略勝一籌,批量更新也略勝一籌。
本文僅作簡要介紹,您可以參考文檔和測試用例以了解具體的使用方法。
?
原文地址:https://www.codeproject.com/Articles/4649209/A-open-source-ORM-framework-Light-Data
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态