SqlSugar/Src/Asp.Net/SqlServerTest/Demo/Demo0_SqlSugarClient.cs

417 lines
16 KiB
C#
Raw Normal View History

2019-05-05 16:12:29 +08:00
using System;
using System.Collections.Generic;
2019-05-06 12:41:48 +08:00
using System.ComponentModel.DataAnnotations;
using System.Data.Linq.Mapping;
2019-05-05 16:12:29 +08:00
using System.Linq;
using System.Text;
2019-05-05 16:56:03 +08:00
using System.Threading.Tasks;
2019-05-05 16:12:29 +08:00
using SqlSugar;
namespace OrmTest
{
2019-05-20 17:20:36 +08:00
public class Demo0_SqlSugarClient
2019-05-05 16:12:29 +08:00
{
public static void Init()
{
2019-05-07 11:23:03 +08:00
SqlSugarClient();//Create db
DbContext();//Optimizing SqlSugarClient usage
SingletonPattern();//Singleten Pattern
2019-06-02 16:36:01 +08:00
DistributedTransactionExample();
MasterSlave();//Read-write separation
2019-05-07 11:23:03 +08:00
CustomAttribute();
2019-05-05 16:12:29 +08:00
}
2019-06-02 16:36:01 +08:00
private static void MasterSlave()
{
Console.WriteLine("");
Console.WriteLine("#### MasterSlave Start ####");
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = Config.ConnectionString,//Master Connection
DbType = DbType.SqlServer,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true,
SlaveConnectionConfigs = new List<SlaveConnectionConfig>() {
new SlaveConnectionConfig() { HitRate=10, ConnectionString=Config.ConnectionString2 } ,
new SlaveConnectionConfig() { HitRate=10, ConnectionString=Config.ConnectionString2 }
}
});
db.Aop.OnLogExecuted = (s, p) =>
{
Console.WriteLine(db.Ado.Connection.ConnectionString);
};
Console.WriteLine("Master:");
db.Insertable(new Order() { Name = "abc", CustomId = 1, CreateTime = DateTime.Now }).ExecuteCommand();
Console.WriteLine("Slave:");
db.Queryable<Order>().First();
Console.WriteLine("#### MasterSlave End ####");
}
2019-05-06 14:20:43 +08:00
private static void SqlSugarClient()
{
2019-05-06 14:55:44 +08:00
//Create db
Console.WriteLine("#### SqlSugarClient Start ####");
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
DbType = DbType.SqlServer,
ConnectionString = Config.ConnectionString,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true,
AopEvents = new AopEvents
{
OnLogExecuting = (sql, p) =>
{
Console.WriteLine(sql);
2019-05-20 17:20:36 +08:00
Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));
2019-05-06 14:55:44 +08:00
}
}
});
2019-06-02 15:31:27 +08:00
//If no exist create datebase
2019-05-20 17:58:18 +08:00
db.DbMaintenance.CreateDatabase();
2019-06-02 15:31:27 +08:00
//Use db query
2019-05-06 14:55:44 +08:00
var dt = db.Ado.GetDataTable("select 1");
2019-05-19 19:58:53 +08:00
2019-06-02 15:31:27 +08:00
//Create tables
2019-06-02 10:42:18 +08:00
db.CodeFirst.InitTables(typeof(OrderItem),typeof(Order));
var id = db.Insertable(new Order() { Name = "order1", CustomId = 1, Price = 0, CreateTime = DateTime.Now }).ExecuteReturnIdentity();
2019-06-02 15:31:27 +08:00
//Insert data
2019-06-02 11:09:03 +08:00
db.Insertable(new OrderItem() { OrderId = id, Price = 0, CreateTime=DateTime.Now }).ExecuteCommand();
2019-05-06 14:55:44 +08:00
Console.WriteLine("#### SqlSugarClient End ####");
2019-05-06 14:49:55 +08:00
2019-05-06 14:20:43 +08:00
}
private static void DbContext()
{
2019-05-06 14:22:02 +08:00
Console.WriteLine("");
Console.WriteLine("#### DbContext Start ####");
2019-05-06 14:49:55 +08:00
var insertObj = new Order { Name = "jack", CreateTime = DateTime.Now };
2019-05-06 14:20:43 +08:00
var InsertObjs = new Order[] { insertObj };
DbContext context = new DbContext();
2019-05-09 17:55:11 +08:00
context.Db.CodeFirst.InitTables<Order, OrderItem,Custom>();//Create Tables
2019-05-06 14:49:55 +08:00
;
2019-05-06 14:20:43 +08:00
var orderDb = context.OrderDb;
//Select
var data1 = orderDb.GetById(1);
var data2 = orderDb.GetList();
2019-05-06 14:49:55 +08:00
var data3 = orderDb.GetList(it => it.Id == 1);
2019-05-06 14:20:43 +08:00
var data4 = orderDb.GetSingle(it => it.Id == 1);
var p = new PageModel() { PageIndex = 1, PageSize = 2 };
var data5 = orderDb.GetPageList(it => it.Name == "xx", p);
2021-07-31 21:28:43 +08:00
Console.Write(p.TotalCount);
2019-05-06 14:20:43 +08:00
var data6 = orderDb.GetPageList(it => it.Name == "xx", p, it => it.Name, OrderByType.Asc);
2021-07-31 21:28:43 +08:00
Console.Write(p.TotalCount);
2019-05-06 14:20:43 +08:00
List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" });//id=1
var data7 = orderDb.GetPageList(conModels, p, it => it.Name, OrderByType.Asc);
orderDb.AsQueryable().Where(x => x.Id == 1).ToList();
//Insert
orderDb.Insert(insertObj);
orderDb.InsertRange(InsertObjs);
var id = orderDb.InsertReturnIdentity(insertObj);
orderDb.AsInsertable(insertObj).ExecuteCommand();
//Delete
orderDb.Delete(insertObj);
2019-06-02 11:09:03 +08:00
orderDb.DeleteById(11111);
orderDb.DeleteById(new int[] { 1111, 2222 });
orderDb.Delete(it => it.Id == 1111);
orderDb.AsDeleteable().Where(it => it.Id == 1111).ExecuteCommand();
2019-05-06 14:20:43 +08:00
//Update
2019-05-06 14:49:55 +08:00
orderDb.Update(insertObj);
orderDb.UpdateRange(InsertObjs);
2019-05-06 14:20:43 +08:00
orderDb.Update(it => new Order() { Name = "a", }, it => it.Id == 1);
2019-05-06 14:49:55 +08:00
orderDb.AsUpdateable(insertObj).UpdateColumns(it => new { it.Name }).ExecuteCommand();
//Use Inherit DbContext
OrderDal dal = new OrderDal();
2019-05-06 14:55:44 +08:00
var data = dal.GetById(1);
2019-05-06 14:49:55 +08:00
var list = dal.GetList();
2019-05-06 14:51:09 +08:00
Console.WriteLine("#### DbContext End ####");
2019-05-06 14:20:43 +08:00
}
2019-05-06 12:41:48 +08:00
private static void CustomAttribute()
{
Console.WriteLine("");
Console.WriteLine("#### Custom Attribute Start ####");
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = Config.ConnectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute,
ConfigureExternalServices = new ConfigureExternalServices()
{
EntityService = (property, column) =>
{
var attributes = property.GetCustomAttributes(true);//get all attributes
if (attributes.Any(it => it is KeyAttribute))// by attribute set primarykey
{
column.IsPrimarykey = true;
}
},
EntityNameService = (type, entity) =>
{
var attributes = type.GetCustomAttributes(true);
if (attributes.Any(it => it is TableAttribute))
{
entity.DbTableName = (attributes.First(it => it is TableAttribute) as TableAttribute).Name;
}
}
}
});
2019-06-02 09:57:09 +08:00
db.CodeFirst.InitTables<AttributeTable>();//Create Table
2019-05-06 12:41:48 +08:00
2019-06-02 09:57:09 +08:00
db.Insertable(new AttributeTable() { Id = Guid.NewGuid().ToString(), Name = "Name" }).ExecuteCommand();
var list = db.Queryable<AttributeTable>().ToList();
2019-05-06 12:41:48 +08:00
Console.WriteLine("#### Custom Attribute End ####");
}
2019-05-05 16:56:03 +08:00
private static void SingletonPattern()
{
Console.WriteLine("");
Console.WriteLine("#### Singleton Pattern Start ####");
Console.WriteLine("Db_Id:" + singleDb.ContextID);
Console.WriteLine("Db_Id:" + singleDb.ContextID);
var task = new Task(() =>
{
Console.WriteLine("Task DbId:" + singleDb.ContextID);
new Task(() =>
{
Console.WriteLine("_Task_Task DbId:" + singleDb.ContextID);
Console.WriteLine("_Task_Task DbId:" + singleDb.ContextID);
}).Start();
Console.WriteLine("Task DbId:" + singleDb.ContextID);
});
task.Start();
task.Wait();
System.Threading.Thread.Sleep(500);
Console.WriteLine(string.Join(",", singleDb.TempItems.Keys));
Console.WriteLine("#### Singleton Pattern end ####");
}
2021-09-07 10:59:21 +08:00
static SqlSugarScope singleDb = new SqlSugarScope(
2019-05-05 16:56:03 +08:00
new ConnectionConfig()
{
ConfigId = 1,
DbType = DbType.SqlServer,
ConnectionString = Config.ConnectionString,
InitKeyType = InitKeyType.Attribute,
2019-05-06 14:20:43 +08:00
IsAutoCloseConnection = true,
2019-05-05 16:56:03 +08:00
AopEvents = new AopEvents()
{
OnLogExecuting = (sql, p) => { Console.WriteLine(sql); }
}
});
2019-05-05 16:12:29 +08:00
private static void DistributedTransactionExample()
{
Console.WriteLine("");
Console.WriteLine("#### Distributed TransactionExample Start ####");
SqlSugarClient db = new SqlSugarClient(new List<ConnectionConfig>()
{
2019-06-02 10:08:32 +08:00
new ConnectionConfig(){ ConfigId="1", DbType=DbType.SqlServer, ConnectionString=Config.ConnectionString,InitKeyType=InitKeyType.Attribute,IsAutoCloseConnection=true },
new ConnectionConfig(){ ConfigId="2", DbType=DbType.SqlServer, ConnectionString=Config.ConnectionString2 ,InitKeyType=InitKeyType.Attribute ,IsAutoCloseConnection=true}
2019-05-05 16:12:29 +08:00
});
2019-06-02 10:04:49 +08:00
//use db1
2019-05-05 16:12:29 +08:00
db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Order), typeof(OrderItem));//
db.Insertable(new Order() { Name = "order1", CreateTime = DateTime.Now }).ExecuteCommand();
Console.WriteLine(db.CurrentConnectionConfig.DbType + ":" + db.Queryable<Order>().Count());
2019-06-02 10:04:49 +08:00
//use db2
db.ChangeDatabase("2");
db.DbMaintenance.CreateDatabase();//Create Database2
2019-05-05 16:12:29 +08:00
db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Order), typeof(OrderItem));
db.Insertable(new Order() { Name = "order1", CreateTime = DateTime.Now }).ExecuteCommand();
Console.WriteLine(db.CurrentConnectionConfig.DbType + ":" + db.Queryable<Order>().Count());
2019-05-07 13:02:19 +08:00
// Example 1
Console.WriteLine("Example 1");
2019-05-05 16:12:29 +08:00
try
{
2019-05-07 12:48:47 +08:00
db.BeginTran();
2019-05-05 16:12:29 +08:00
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("1");//use db1
2019-05-05 16:12:29 +08:00
db.Deleteable<Order>().ExecuteCommand();
Console.WriteLine("---Delete all " + db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("2");//use db2
2019-05-05 16:12:29 +08:00
db.Deleteable<Order>().ExecuteCommand();
Console.WriteLine("---Delete all " + db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
throw new Exception();
2019-05-07 12:48:47 +08:00
db.CommitTran();
2019-05-05 16:12:29 +08:00
}
catch
{
2019-05-07 12:48:47 +08:00
db.RollbackTran();
2019-05-05 16:12:29 +08:00
Console.WriteLine("---Roll back");
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("1");//use db1
2019-05-05 16:12:29 +08:00
Console.WriteLine(db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("2");//use db2
2019-05-05 16:12:29 +08:00
Console.WriteLine(db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
}
2019-05-07 13:02:19 +08:00
// Example 2
Console.WriteLine("Example 2");
var result=db.UseTran(() =>
{
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("1");//use db1
2019-05-07 13:02:19 +08:00
db.Deleteable<Order>().ExecuteCommand();
Console.WriteLine("---Delete all " + db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("2");//use db2
2019-05-07 13:02:19 +08:00
db.Deleteable<Order>().ExecuteCommand();
Console.WriteLine("---Delete all " + db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
throw new Exception("");
});
if (result.IsSuccess == false) {
Console.WriteLine("---Roll back");
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("1");//use db1
2019-05-07 13:02:19 +08:00
Console.WriteLine(db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("2");//use db2
2019-05-07 13:02:19 +08:00
Console.WriteLine(db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
}
// Example 3
Console.WriteLine("Example 3");
2019-05-09 12:56:26 +08:00
var result2 = db.UseTranAsync(() =>
{
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("1");//use db1
2019-05-09 12:56:26 +08:00
db.Deleteable<Order>().ExecuteCommand();
Console.WriteLine("---Delete all " + db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
2019-06-02 10:04:49 +08:00
db.ChangeDatabase("2");//use db2
2019-05-09 12:56:26 +08:00
db.Deleteable<Order>().ExecuteCommand();
Console.WriteLine("---Delete all " + db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
throw new Exception("");
});
result2.Wait();
if (result.IsSuccess == false)
{
Console.WriteLine("---Roll back");
2019-06-02 10:08:32 +08:00
db.ChangeDatabase("1");//use sqlserver
2019-05-09 12:56:26 +08:00
Console.WriteLine(db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
2019-06-02 10:08:32 +08:00
db.ChangeDatabase("2");//use mysql
2019-05-09 12:56:26 +08:00
Console.WriteLine(db.CurrentConnectionConfig.DbType);
Console.WriteLine(db.Queryable<Order>().Count());
}
Console.WriteLine("#### Distributed TransactionExample End ####");
2019-05-05 16:12:29 +08:00
}
}
2019-05-06 14:20:43 +08:00
2019-05-06 14:49:55 +08:00
/// <summary>
/// DbContext Example 1
/// </summary>
2019-05-06 14:20:43 +08:00
public class DbContext
{
public SqlSugarClient Db;
public DbContext()
{
Db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = Config.ConnectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute,
AopEvents = new AopEvents()
{
OnLogExecuting = (sql, p) =>
{
Console.WriteLine(sql);
}
}
});
}
public SimpleClient<Order> OrderDb => new SimpleClient<Order>(Db);
public SimpleClient<OrderItem> OrderItemDb => new SimpleClient<OrderItem>(Db);
}
2019-05-06 14:49:55 +08:00
public class OrderDal : DbContext<Order>
{
2019-05-06 14:55:44 +08:00
2019-05-06 14:49:55 +08:00
}
/// <summary>
/// DbContext Example 2
/// </summary>
/// <typeparam name="T"></typeparam>
public class DbContext<T> where T : class, new()
{
public SqlSugarClient Db;
public DbContext()
{
Db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = Config.ConnectionString,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute,
AopEvents = new AopEvents()
{
OnLogExecuting = (sql, p) =>
{
Console.WriteLine(sql);
}
}
});
}
public SimpleClient<T> CurrentDb => new SimpleClient<T>(Db);
public virtual T GetById(int id)
{
return CurrentDb.GetById(id);
}
public virtual List<T> GetList()
{
return CurrentDb.GetList();
}
public virtual bool Delete(int id)
{
return CurrentDb.DeleteById(id);
}
}
2019-05-05 16:12:29 +08:00
}