Giter Site home page Giter Site logo

donet5 / sqlsugar Goto Github PK

View Code? Open in Web Editor NEW
4.9K 257.0 1.3K 68.9 MB

.Net aot ORM Fastest ORM Simple Easy Sqlite orm Oracle ORM Mysql Orm postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping

Home Page: https://www.donet5.com/Home/Doc

License: MIT License

C# 99.94% Batchfile 0.01% TSQL 0.05%
orm core sqlsever mysql sqlite oralce postgresql clickhouse questdb

sqlsugar's Introduction

English | 中文

SqlSugar ORM

SqlSugar is .NET open source ORM framework, maintained and updated by Fructose Big Data Technology team, the most easy-to-use ORM out of the box

Advantages: [Low code] [High performance] [Super simple] [Comprehensive features] [ Multi-database compatible] [Suitable products]

Support .NET

.net framework.net core3.1.ne5.net6.net7.net8 .net9 .net10

Support database

MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、 人大金仓(国产推荐)、神通数据库、瀚高、Access 、OceanBase TDengine QuestDb Clickhouse MySqlConnector、华为 GaussDB 南大通用 GBase、MariaDB、Tidb、Odbc、Percona Server, Amazon Aurora、Azure Database for MySQL、 Google Cloud SQL for MySQL、custom database

Description

  1. Truly achieve zero SQL ORM table building, index and CRUD all support
  2. Support.NET millions of big data write, update, subtable and has billions of query statistics mature solutions
  3. Support SAAS complete application: cross-database query, audit, tenant sub-database, tenant sub-table and tenant data isolation
  4. Support low code + workflow (dynamic class building, dynamic table building, non-entity multi-library compatible with CRUD, JSON TO SQL, custom XML, etc.)
  5. Support ValueObject, discriminator, repository, UnitOfWork, DbContext, AOP

Documentation

Other Select Insert Update Delete
Nuget Query Insert Update Delete
Start guide Join query Insert without entity Update without entity Delete without entity
Multiple databases Include query Include Insert Include Update Include Delete
中文文档 Cross database query Insert by json Update by json Delete by json

Feature characteristic

Feature1 : Join query

Super simple query syntax

var query  = db.Queryable<Order>()
            .LeftJoin<Custom>  ((o, cus) => o.CustomId == cus.Id)
            .LeftJoin<OrderItem> ((o, cus, oritem ) => o.Id == oritem.OrderId)
            .LeftJoin<OrderItem> ((o, cus, oritem , oritem2) => o.Id == oritem2.OrderId)
            .Where(o => o.Id == 1)  
            .Select((o, cus) => new ViewOrder { Id = o.Id, CustomName = cus.Name })
            .ToList();   
SELECT
  [o].[Id] AS [Id],
  [cus].[Name] AS [CustomName]
FROM
  [Order] o
  Left JOIN [Custom] cus ON ([o].[CustomId] = [cus].[Id])
  Left JOIN [OrderDetail] oritem ON ([o].[Id] = [oritem].[OrderId])
  Left JOIN [OrderDetail] oritem2 ON ([o].[Id] = [oritem2].[OrderId])
WHERE
  ([o].[Id] = @Id0)

Feature2 :Include Query、Insert、Delete and Update

//Includes
var list=db.Queryable<Test>()
           .Includes(x => x.Provinces,x=>x.Citys ,x=>x.Street) //multi-level
           .Includes(x => x.ClassInfo) 
           .ToList();

//Includes+left join        
var list5= db.Queryable<Student_004>()
           .Includes(x => x.school_001, x => x.rooms)
           .Includes(x => x.books)
           .LeftJoin<Order>((x, y) => x.Id==y.sid)
           .Select((x,y) => new Student_004DTO
           {
               SchoolId = x.SchoolId,
               books = x.books,
               school_001 = x.school_001,
               Name=y.Name
           })
           .ToList();          

Feature3 : Page query

 int pageIndex = 1; 
 int pageSize = 20;
 int totalCount=0;
 var page = db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount);

Feature4 : Dynamic expression

var names= new string [] { "a","b"};
Expressionable<Order> exp = new Expressionable<Order>();
foreach (var item in names)
{
    exp.Or(it => it.Name.Contains(item.ToString()));
}
var list= db.Queryable<Order>().Where(exp.ToExpression()).ToList();
SELECT [Id],[Name],[Price],[CreateTime],[CustomId]
       FROM [Order]  WHERE (
                     ([Name] like '%'+ CAST(@MethodConst0 AS NVARCHAR(MAX))+'%') OR 
                     ([Name] like '%'+ CAST(@MethodConst1 AS NVARCHAR(MAX))+'%')
                    )

Feature5 : Multi-tenant transaction

//Creaate  database object
SqlSugarClient db = new SqlSugarClient(new List<ConnectionConfig>()
{
    new ConnectionConfig(){ ConfigId="0", DbType=DbType.SqlServer,  ConnectionString=Config.ConnectionString, IsAutoCloseConnection=true },
    new ConnectionConfig(){ ConfigId="1", DbType=DbType.MySql, ConnectionString=Config.ConnectionString4 ,IsAutoCloseConnection=true}
});


var mysqldb = db.GetConnection("1");//mysql db
var sqlServerdb = db.GetConnection("0");// sqlserver db
 
db.BeginTran();
            mysqldb.Insertable(new Order()
            {
                CreateTime = DateTime.Now,
                CustomId = 1,
                Name = "a",
                Price = 1
            }).ExecuteCommand();
            mysqldb.Queryable<Order>().ToList();
            sqlServerdb.Queryable<Order>().ToList();

db.CommitTran();

Feature6 : Singleton Pattern

Implement transactions across methods

public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()
 {
            DbType = SqlSugar.DbType.SqlServer,
            ConnectionString = Config.ConnectionString,
            IsAutoCloseConnection = true 
  },
  db=> {
            db.Aop.OnLogExecuting = (s, p) =>
            {
                Console.WriteLine(s);
            };
 });
 
 
  using (var tran = Db.UseTran())
  {
          
              
               new Test2().Insert(XX);
               new Test1().Insert(XX);
               ..... 
                ....
                         
             tran.CommitTran(); 
 }

Feature7 : Query filter

//set filter
db.QueryFilter.Add(new TableFilterItem<Order>(it => it.Name.Contains("a")));  
 
   
db.Queryable<Order>().ToList();
//SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order]  WHERE  ([Name] like '%'+@MethodConst0+'%')  

db.Queryable<OrderItem, Order>((i, o) => i.OrderId == o.Id)
        .Where(i => i.OrderId != 0)
        .Select("i.*").ToList();
//SELECT i.* FROM [OrderDetail] i  ,[Order]  o  WHERE ( [i].[OrderId] = [o].[Id] )  AND 
//( [i].[OrderId] <> @OrderId0 )  AND  ([o].[Name] like '%'+@MethodConst1+'%')
 

Feature8 : Insert or update

insert or update

Db.Storageable(list2).ExecuteCommand();
Db.Storageable(list2).PageSize(1000).ExecuteCommand();
Db.Storageable(list2).PageSize(1000,exrows=> {   }).ExecuteCommand();

Feature9 : Auto split table

Split entity

[SplitTable(SplitType.Year)]//Table by year (the table supports year, quarter, month, week and day)
[SugarTable("SplitTestTable_{year}{month}{day}")] 
 public class SplitTestTable
 {
     [SugarColumn(IsPrimaryKey =true)]
     public long Id { get; set; }
 
     public string Name { get; set; }
     
     //When the sub-table field is inserted, which table will be inserted according to this field. 
     //When it is updated and deleted, it can also be convenient to use this field to      
     //find out the related table 
     [SplitField] 
     public DateTime CreateTime { get; set; }
 }

Split query

 var lis2t = db.Queryable<OrderSpliteTest>()
.SplitTable(DateTime.Now.Date.AddYears(-1), DateTime.Now)
.ToPageList(1,2); 

Feature10 : Big data insert or update

10.1 BulkCopy
db.Fastest<Order>().BulkCopy(lstData);//insert
db.Fastest<Order>().PageSize(100000).BulkCopy(insertObjs);
db.Fastest<System.Data.DataTable>().AS("order").BulkCopy(dataTable);
 
10.2 BulkUpdate
db.Fastest<Order>().BulkUpdate(GetList())//update 
db.Fastest<Order>().PageSize(100000).BulkUpdate(GetList()) 
db.Fastest<Order>().BulkUpdate(GetList(),new string[] { "Id"});//no primary key
db.Fastest<Order>().BulkUpdate(GetList(), new string[]{"id"},
                     new string[]{"name","time"})//Set the updated column
//DataTable                           
db.Fastest<System.Data.DataTable>().AS("Order").BulkUpdate(dataTable,"Id");//Id is primary key
db.Fastest<System.Data.DataTable>().AS("Order").BulkUpdate(dataTable,"Id",Set the updated column);
                          

10.3 BulkMerge (5.1.4.109)
db.Fastest<Order>().BulkMerge(List);
db.Fastest<Order>().PageSize(100000).BulkMerge(List);
 

10.4 BulkQuery
db.Queryable<Order>().ToList();//Slightly faster than Dapper
//Suitable for big data export
List<Order> order = new List<Order>(); 
db.Queryable<Order>().ForEach(it=> { order.Add(it); } ,2000);

10.5 BulkDelete
db.Deleteable<Order>(list).PageSize(1000).ExecuteCommand();

sqlsugar's People

Contributors

burakcinar07 avatar caichen01 avatar chuck2leo avatar dengwang avatar dependabot[bot] avatar dotnetnext avatar gitjacob avatar gurasaa avatar henq avatar jheliu avatar kingstien avatar leoskey avatar lhq980 avatar lileyzhao avatar longtaosu avatar mrxhh avatar o0yaya0o avatar orchesadam avatar otcom avatar oyq413 avatar pinzi avatar robinloveyou avatar sampsonye avatar shawnxu97 avatar sy0574 avatar tangjingtai avatar tengfei8771 avatar xland avatar yangzhinong avatar yaoguoba avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sqlsugar's Issues

注释文档提高

性能方面都蛮好的,但是XML注释文档写的确实有点差啊,诸如“Delete《T》(it=>it.id=100) 或者Delete《T》(3)”,找个小弟帮你优化一下吧。

SugarColumn(IsIgnore = true)并没有排除属性数据库操作

属性定义:
[SugarColumn(IsIgnore = true)] public EntityState EntityState { get { return this.entityState; } set { this.entityState = value; } }

数据库操作:
DB.Insertable(listAdd.ToArray()).ExecuteCommand();

异常:
捕捉到 System.Data.SqlClient.SqlException
HResult=-2146232060
Message=列名 'EntityState' 无效。
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
Class=16
LineNumber=2
Number=207
Procedure=""
Server=175.16.8.56
State=1
StackTrace:
在 SqlSugar.AdoProvider.ExecuteCommand(String sql, SugarParameter[] parameters)
在 SqlSugar.InsertableProvider1.ExecuteCommand() 在 Nurse.BLL.CCAdapter.SaveRange[T](DBProxyContext DB, IEnumerable1 list) 位置 e:\workplace\NurseNew\Nurse.BLL\DBProxy\CCAdapter.cs:行号 111
InnerException:

你好,最近在一个系统,前期功能不多时候,没有什么问题,后期功能多了,频繁出现一个错误。

你好,最近在做一个系统,前期功能不多时候,没有什么问题,后期功能多了,频繁出现一个错误。

“There is already an open DataReader associated with this Connection which must be closed first.”

[用的是MySql,后来我Google一下,说是MySql一个bug(https://www.bbsmax.com/A/B0zqYggnzv/),说MySql同一时刻只允许有一个连接被打开读取数据。

请问你有遇到过类似的问题?

新下载的DEMO,SqlLite报错

image
SqlSugar.UtilExceptions:“English Message : Connection open error . unable to open database file
Chinese Message : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,实在找不到原因请先Google错误信息:unable to open database file.”

List<ConditionalModel>相关的问题

ConditionalModel.ConditionalType等于In的时候能支持 数组包含么?例:字段是varchar类型,FieldValue=“222,333,444”的时候ORM会不会自动转成 in (“222”,“333”,“444”)么?

Async方法事务无效

经测试发现Async方法事务无效,如果用非Async则有效。如何避免此问题?

private static async void Test()
        {
            SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = "server=.;database=TEST;uid=sa;pwd=sa", //必填
                DbType = DbType.SqlServer, //必填
                IsAutoCloseConnection = true, //默认false
                InitKeyType = InitKeyType.SystemTable
            }); //默认SystemTable
            db.Ado.BeginTran();
            await db.Insertable<pbAppCustomer>(new pbAppCustomer()
            {
                iAppId = 1,
                dExpiredTime = DateTime.Now,
                iCustomerId = 1,
                iIden = 1,
                iVersion = 1 ,
                sCustomerName = "test",
                tLastChangeTime = DateTime.Now,
                iClientCount = 11,
                iCustomerSource = 1
            }).ExecuteCommandAsync();
            db.Ado.RollbackTran();
        }

SqlSugar在Mysql中使用 SqlFunc.IIF时候拼接字段的问题

Code:
SqlFunc.IIF<String>(s1.RESERVATION_SEX == "0", s1.RESERVATION_NAME + "女士", s1.RESERVATION_NAME + "先生")

SQL:
SELECT RESERVATION_COUSULTANT_ID AS RESERVATION_COUSULTANT_ID, RESERVATION_TIME AS RESERVATION_TIME, RESERVATION_SEX, RESERVATION_MOBILE AS RESERVATION_MOBILE, ( CASE WHEN (RESERVATION_SEX = '0') THEN ( RESERVATION_NAME + '女士' ) ELSE ( RESERVATION_NAME + '先生' ) END ) AS RESERVATION_NAME, RESERVATION_QUESTION AS RESERVATION_QUESTION FROM c_reservation_cousultant_t ORDER BY RESERVATION_TIME DESC LIMIT 0, 10
在这里如果在MYSQL里 应该是要使用Concat进行拼接才有效果

Sqlsugar是 线程安全的吗?

在一次实际应用中,并发量太高,导致缓存了错误的sql 模板,以至于后来每次sql查询 都会报”不能将int 转换成string”的错。
抱歉,暂时还没有找到一个非常简单的重现方法。
谢谢了。

能否增加插入更新功能upsert?以及大数据处理能力?

能否增加插入更新功能upsert?
比如我要导出1000W 数据 导出成csv 每1000条做个切分,直接tolist内存吃不消,用分页每次都要查询影响效率,原生的 可以循环读取,避免崩溃,但是需要手动添加到指定大小的 list 然后生成csv,

根据ORACLE生成DBFIRST的实体类报错

数据库表比较多 几千张
每次生成3分钟左右保存
无奈获取表名一个个生成
报错信息
测试名称: TestCreateClassName
测试全名: JWXTService.Tests.UnitTest1.TestCreateClassName
测试源: E:\GIT\教学质量数据统计平台\JWXTService\JWXTService\JWXTService.Tests\UnitTest1.cs:第 12 行
测试结果: 未通过
测试持续时间: 0:03:36.5063797

结果 的堆栈跟踪:
在 SqlSugar.Check.Exception(Boolean isException, String message, String[] args)
在 SqlSugar.DbFirstProvider.ToClassStringList(String nameSpace)
在 SqlSugar.DbFirstProvider.CreateClassFile(String directoryPath, String nameSpace)
在 JWXTService.Tests.UnitTest1.TestCreateClassName() 位置 E:\GIT\教学质量数据统计平台\JWXTService\JWXTService\JWXTService.Tests\UnitTest1.cs:行号 32
结果 的消息:
测试方法 JWXTService.Tests.UnitTest1.TestCreateClassName 引发了异常:
SqlSugar.UtilExceptions: Table 'TDKCCJZHB' error,You can filter it with Db.DbFirst.Where(name=>name!="TDKCCJZHB" )
Error message:ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded
结果 的标准输出: TDKCCJZHB

db.IgnoreColumns.Add("","");错误

var db = GetInstance();
db.IgnoreColumns.Add("TestId", "Student");
此时对db的忽略列正常。
var dbOther = GetOtherDB();
dbOther.Updateable()等其他操作事,照样没有("TestId", "Student")字段。
此时调试dbOther.IgnoreColumns 为 空。

请问是否有支持postgresql的计划?

一直都很喜欢和关注sqlsugar,可是平时多用的postgresql数据库,不知道有没这方面的计划,或是如何修改可以支持,有可能的话,也可以参与。

MySQL CHAR(36) 无效

数据库MYSQL、主键为CHAR(36) 实体接收的类型是Guid
查询 出来的值既然与实际DB 的值不一样
数据库值:da9462f9-b455-4a02-ac1c-3dfdc91f0b85
查询出来的值:00000001-62f9-da94-55b4-024aac1c3dfd
不解

插入decimal类型的字段时,会精度丢失

这是sql跟踪生成的代码
@ProductMonthRate decimal(2,2)
@ProductMonthRate=0.71

最后表中的值
ProductMonthRate
1
0
1
1
1
1
1

表中定义的是
ProductMonthRate decimal(18, 0) 允许为NULL

timestamp 映射的时候有问题

MSSQL 数据库,字段类型是timestamp
实体里面的定义:
public DateTime LastUpdatedDateTime { get; set; }
var list = SqlSugarClient.GetList("select * fromUsers");

错误信息:实体映射出错。
错误详情:指定的转换无效。

在多表查询的时候,如果select了相同的表(实体类),报已添加了具有相同键的项 之异常

如文档中的例子, 稍微修改下Select函数的参数

var list = db.Queryable<Student, School, Student>((st, sc, st2) => new object[] {
    JoinType.Left,st.SchoolId==sc.Id,
    JoinType.Left,st.SchoolId==st2.Id
})
.Where((st, sc, st2) => st2.Id == 1 || sc.Id == 1 || st.Id == 1)
.OrderBy((sc) => sc.Id)
.OrderBy((st,sc)=> st.Name,OrderByType.Desc)
.Select((st,sc,st2)=>new { st=st,st2=st2})
.ToList();

在Select里面, 因为st和st2都是Student表,具有相同的实体类名,在执行ToList()时,其中会执行
DataReaderToDictionary方法,循环把DataReader的 <类名.字段名> ,值 添加到字典里面。
能不能想办法换成 <别名.字段名>作为 字段的key,像例子中 <st.Id> <st2.Id> ,这样避免这个异常产生呢?或者, 各位大佬有没有其他解决方案啊?

OrderBy有时会失效

最近发现使用的OrderBy方法最后生成的sql会是row_number的order by,再between RowIndex分页的。
但测试sql语句发现rowIndex不是按顺序排列的,所以最后结果经常不是希望要的排序。能否在最后生成的sql加入order RowIndex呢?

Core

var list = baseRepository.db.Queryable<Model.sys_member, Model.bif_company>((m, c) => new object[] { SqlSugar.JoinType.Left, m.coid == c.id }).OrderBy((m)=>m.rdt,SqlSugar.OrderByType.Desc) .Select((m, c) => new Model.sys_member{ account=m.account, name=m.name, position=m.position, rdt=m.rdt, coid=m.coid,corpName=c.name}).ToList();

public partial class sys_member
{
[SugarColumn(IsIgnore = true)]
public string corpName { get; set; }
}

我的 sys_member corpName 加了 [SugarColumn(IsIgnore = true)] 但是我 ew Model.sys_member{ account=m.account, name=m.name, position=m.position, rdt=m.rdt, coid=m.coid,corpName=c.name}) 用的 是 Model.bif_company.name 取出来之后 是 NULL ,这应该和数据库 操作没关系 ,可我的 取值确实 Null

当使用复杂模型时,使用Updateable方法时报错

Entity使用复杂模型
[SugarColumn(IsIgnore = true)] public DaySaleStatisticalCondition DaySaleStatisticalCondition { get { return CreateMapping<DaySaleStatisticalCondition>() .Single(it => it.Id == this.ConditionId); } set { } }
然后手动New一个该Entity,使用Updateable方法时抛出异常Please use Sqlugar.ModelContext,经过查看源码发现原因是手动New的Entity的Context属性为空,在调用时会ArgumentNullException因此报错,但是实际上这个属性我标记了IsIgnore ,因此不应该去读取和检查该属性,望修复,谢谢

4.1.0.8版本 Mysql出现的问题

1,分页查询ToPageList总是少第二页第一条数据,
2,数据库类型bit, DB模型不支持bool,报超出长度的错。用Int才可以。
3,数据库类型int,DB模型不支持long。

使用DBFIRST生成ORACLE的Model的问题

测试可以正常连接ORACLE数据库进行使用 但是生成DBFIRST MODEL时提示

SqlSugarException.NotSupportedException? "byte[]" Type NotSupported, DbBindProvider.GetPropertyTypeName error.

Description: HTTP 500.Error processing request.

Details: Non-web exception. Exception origin (name of application or object): SqlSugar.
Exception stack trace:
at SqlSugar.Check.ThrowNotSupportedException (System.String message) [0x00028] in :0
at SqlSugar.OracleDbBind.GetPropertyTypeName (System.String dbTypeName) [0x0010b] in :0
at SqlSugar.DbFirstProvider.GetPropertyTypeName (SqlSugar.DbColumnInfo item) [0x00025] in :0
at SqlSugar.DbFirstProvider.GetClassString (SqlSugar.DbTableInfo tableInfo, System.String& className) [0x00221] in :0
at SqlSugar.DbFirstProvider.ToClassStringList (System.String nameSpace) [0x00042] in :0
at SqlSugar.DbFirstProvider.CreateClassFile (System.String directoryPath, System.String nameSpace) [0x0000d] in :0
at DISTPrinter.Global+<>c.<Application_Start>b__0_0 () [0x0001a] in :0
at System.Threading.Tasks.Task.InnerInvoke () [0x0000f] in :0
at System.Threading.Tasks.Task.Execute () [0x00010] in :0

MySQL 批量插入 能支持这种语法?

insert into tabl1 values (1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1)

MySQL 批量新增 能支持这种语法?

现在我看您的是
insert into tabl1
select 1,1
union all
select 2,1
...
这种语法

在这里有一个BUG

 var sql = @"
                        INSERT INTO dbo.AdminUser
                        (
 
                            NickName,
                            Password
                        )
                        VALUES
                        (   
                            @NickName,
                            @Password
                        )";


            var parms = new AdminUser() { NickName = "名称", Password = "238904823904" };
            db.DbContext.Ado.ExecuteCommand(sql, parms);

会报

未经处理的异常: SqlSugar.UtilExceptions: The parameter format is wrong.
Use new{xx=xx, xx2=xx2} or
Dictionary<string, object> or
SugarParameter []

版本4X

insert 可否加入 选择插入的列

看api文档,插入的功能比较单薄,里面有添加不插入的列的方法,不知道可否加入选择性插入的列的方法:
1、insert(getTableClassObject(),new string[]{"field1","field1"}) 的方式选择field1和field2插入
2、insert(new {field1="xxx", field2="xxx"}) 指定匹配到属性名的列,类似update
3、db.enableInsertColumn = .....; insert();
4、db.ignoreNullValProperty = true; insert(); //忽略空值属性的列

开源协议

请问一下,sugar准备用什么开源协议呢,好像还没有吧?

实体映射出错

调用方法:
using (var dbcon = Dao.DbConfig.GetDbInstance())
{
result = dbcon.SqlQuery(sql);
}
生成的sql:
select * from (select ROW_NUMBER() OVER(ORDER BY cast(TT.HuoDongExp2 as int) desc, cast(TT.HuoDongExp1 as int) desc) AS 'RowNumber', * from ( select t.[ID], t.[CTime], [WeiXinUnionID], WxName, HuoDongExp1, HuoDongExp2 , ( CASE WHEN wx.HeadImgUrl='' THEN 'aaa' ELSE wx.HeadImgUrl +'aaa' END) ImgUrl, ( CASE WHEN HuoDongExp2 is null THEN cast(HuoDongExp1 as int) ELSE cast(HuoDongExp2 as int) * 50 + cast(HuoDongExp1 as int) END ) zongsu from HD_HuoDongInfo as t with(nolock) left join WeiXinUserInfo wx on t.WeiXinUnionID=wx.UnionID where t.[HuoDongId] = 51 and t.State = 1 and typeid = 1 ) as tt) as ttt
出现的错误
[SqlSugarException]: 错误信息:实体映射出错。
错误详情:指定的转换无效。
在 SqlSugar.Check.Exception(Boolean isException, String message, String[] args)
在 SqlSugar.SqlSugarTool.DataReaderToList[T](Type type, IDataReader dr, String fields, Boolean isClose)
在 SqlSugar.SqlSugarClient.SqlQuery[T](String sql, List`1 pars)
在 SqlSugar.SqlSugarClient.SqlQuery[T](String sql, Object whereObj)

你好,oracle数据库连接在一定量并发时总是会报错,麻烦解惑

测试代码:(clone的源码上写的)
`
static int count = 100;
static object _lock = new object();
static void Main(string[] args)
{
int cc = count;
for (int i = 0; i < cc; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(
(obj) =>
{
try
{
//var rr = new Demo.Test2().GetTest();
var rr = new Demo.Test2().GetTestOrcl();
Console.WriteLine("{0}:{1}", i, rr);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
lock (_lock)
{
count--;
}
}
));
}
while (count > 0)
{
}

        Console.WriteLine("complate");
        Console.ReadKey();
    }

test方法查询一个空表
public dynamic GetTestOrcl()
{
var db = GetInstance(SqlSugar.DbType.Oracle, Config.ConnectionString);
return db.Ado.SqlQueryDynamic("select * from v_Advice_Exec");
}
`
错误:
English Message : Connection open error . 连接请求超时

Chinese Message : 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,实在找不到原因请先Google错误信息:连接请求超时.

当我把并发数值count改到20,就能正常访问
在连接sqlserver数据库时就不会

如何保存byte[]数组到数据库,不定长

新手用SqlSugar,请帮助我谢谢!

定义了个数组
[SugarColumn(IsNullable = true)]
public byte[] Histo { get; set; }
直接给他赋值了别的数组 Histo = new byte[10]{1,2.3,4,5,6,7,8,9,10}
然后执行sqlClient.Insertable(dbTestRst).ExecuteCommandAsync();发现Histo这个数据列并没有数据是空的,我应该如何操作数组写入数据库?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.