Giter Site home page Giter Site logo

donet5 / sqlsugar Goto Github PK

View Code? Open in Web Editor NEW
5.0K 258.0 1.3K 69.56 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 Issues

当使用复杂模型时,使用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 ,因此不应该去读取和检查该属性,望修复,谢谢

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();
        }

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

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

4.1.0.8版本 Mysql出现的问题

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

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

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

“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同一时刻只允许有一个连接被打开读取数据。

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

注释文档提高

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

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

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

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

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

List<ConditionalModel>相关的问题

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

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

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

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

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

开源协议

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

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
...
这种语法

根据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

使用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

如何保存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这个数据列并没有数据是空的,我应该如何操作数组写入数据库?

新下载的DEMO,SqlLite报错

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

timestamp 映射的时候有问题

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

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

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:

MySQL CHAR(36) 无效

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

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

OrderBy有时会失效

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

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进行拼接才有效果

在这里有一个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(); //忽略空值属性的列

实体映射出错

调用方法:
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)

在多表查询的时候,如果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> ,这样避免这个异常产生呢?或者, 各位大佬有没有其他解决方案啊?

你好,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数据库时就不会

Sqlsugar是 线程安全的吗?

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

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.