一、实体类

using SqlSugar;


namespace ConsoleApp

{

[SugarTable("spark_admin.test")]

public class TestEntity

{

//[SugarColumn(ColumnName = "id")]

public long Id { get; set; }


//[SugarColumn(ColumnName = "name")]

public string Name { get; set; }

}

}


二、初始化表

image.png

执行 db2.CodeFirst.InitTables(typeof(TestEntity)); 报错

image.png

监测到的sql脚本如下:

image.png


辛苦大佬帮忙解答,谢谢!

@fate sta :您好, [SugarTable("spark_admin.test")] ,如果没有 spark_admin. 前缀,程序无法查询。达梦数据库中一个数据库实例下面有多个模式,不使用模式就找不到具体的表。

@fate sta :

达梦数据库版本:V8

图片.png

使用达梦的管理工具查询表的时候,表名称前面也是需要加上模式才能成功

图片.png


连接字符串是这样的

string strConnForDM = "server=127.0.0.1;port=5236;user id=SYSDBA;password=sparkcn@com;database=SPARK_ADMIN_NEW;poolsize=5";


不加前缀的时候会报错,如下:

图片.png

图片.png 、

是我的连接字符串写的不对吗?

请大佬指点!谢谢。


@fate sta :

还是在达梦数据库中测试,判断表是否存在

图片.png

跟踪到的SQL如下:

图片.png

查看SQL,里面并没有调用IsAnyTable()方法时传入的参数,“TEST_TABLE2”。


应该是个bug吧,辛苦您确认!


(1)我把跟踪到的sql复制到达梦管理器中,最后加上  and table_name = 'TEST_TABLE2' 这个条件,再执行就是正确的。

图片.png


(2)我查看了您的项目源码

图片.png

DmDbMaintenance 类中并没有重写 IsAnyTable() 方法,调用基类的 GetTableInfoList()

图片.png

查看DmDbMaintenance类中的GetTableInfoListSql()方法,逻辑如下

图片.png

与在控制台中跟踪到的sql语句是一致的。这个sql语句放到达梦管理器中执行是报错的。

图片.png

通过以上两种方式,验证了我的猜想,判断达梦数据库中是否存在某个表的IsAnyTable()方法存在bug,应该重写。

包括DropTable()、InitTables() 等方法都是存在相同的问题。