dmdbms / Microsoft.EntityFrameworkCore.Dm

DaMeng database provider for Entity Framework Core. 达梦数据库Entity Framework Core提供程序.
MIT License
28 stars 9 forks source link

请问目前IDbConnection的实现无法支持Dapper的语法吗 #1

Closed LoremipsumSharp closed 2 years ago

LoremipsumSharp commented 2 years ago
 [Fact]
  public void TestDm()
  {
      var connStr = @"SERVER=******;PORT=5236;USER=*******;PASSWORD=*****";
      var sp = new ServiceCollection().AddDbContext<TestDbContext>(builder =>
      {
          builder.UseDm(connStr);
      }).BuildServiceProvider();
      var scope = sp.CreateScope();
      var dbContext = scope.ServiceProvider.GetService<TestDbContext>();
      var sql = @" select * from test.departments where id in  @DeptIds";
      var result = dbContext.Database.GetDbConnection().Query(sql,new {
          DeptIds = new List<string>() {"xxx"}
      });
  }

错误提示

“Dm.DmException”类型的异常在 DmProvider.dll 中发生,但未在用户代码中进行处理: '第 1 行, 第 88 列[@]附近出现错误: 
语法分析出错'
   在 Dm.DmCommand.do_ExecuteDbDataReader(CommandBehavior behavior)
   在 Dm.DmCommand.ExecuteDbDataReader(CommandBehavior behavior)
   在 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   在 Dapper.SqlMapper.ExecuteReaderWithFlagsFallback(IDbCommand cmd, Boolean wasClosed, CommandBehavior behavior) 在 /_/Dapper/SqlMapper.cs 中: 第 1066 行
   在 Dapper.SqlMapper.<QueryImpl>d__140`1.MoveNext() 在 /_/Dapper/SqlMapper.cs 中: 第 1094 行
   在 System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   在 Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) 在 /_/Dapper/SqlMapper.cs 中: 第 734 行
   在 Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) 在 /_/Dapper/SqlMapper.cs 中: 第 661 行
   在 DemoHub.UnitTest1.TestDm() 在 [d:\workspace\DemoHub\TestDm.cs]() 中: 第 23 行
aaasoft commented 2 years ago

你好,这个项目是从达梦官方提供的dll反编译来的,目前达梦官方只支持ADO.NET、NHibernate和EntityFramework Core,没有支持Dapper。你应该是通过Dapper直接使用的达梦ADO.NET驱动[DmProvider.dll]呢。看报错的信息应该是你使用的Dapper生成的SQL语句有问题吧,在第1行第88列。你可以Clone达梦ADO.NET驱动库,再断点跟一下,看看生成的SQL语句是什么,哪里有语法错误哈。