有键约束时使用BulkMerge(DataTable, new string[],Boolen)异常 返回

使用pgsql,建表语句如下
CREATE TABLE byd_hd_map_db."test" (
id int8 NOT NULL,
fk_id_1 int8 NULL,
fk_id_2 int8 NULL,
CONSTRAINT check_test_fk_id CHECK ((((fk_id_1 IS NULL) AND (fk_id_2 IS NOT NULL)) OR ((fk_id_1 IS NOT NULL) AND (fk_id_2 IS NULL)))),
CONSTRAINT test_pkey PRIMARY KEY (id)
);
测试例子如下
using
SqlSugar;
using
System.Collections.Generic;
namespace
SqlSugarClient_Demo
{
public
class
Program
{
public
static
void
Main(
string
[] args)
{
SqlSugarClient BDb =
new
SqlSugarClient(
new
ConnectionConfig()
{
DbType = SqlSugar.DbType.PostgreSQL,
ConnectionString = Config.ConnectionString,
IsAutoCloseConnection =
true
},
db => {
db.Aop.OnLogExecuting = (sql, pars) => { };
});
var dt = new DataTable(); dt.TableName = "Test"; //设置表名 dt.Columns.Add(new DataColumn("id",typeof(int))); dt.Columns.Add(new DataColumn("fk_id_1", typeof(int))); dt.Columns.Add(new DataColumn("fk_id_2", typeof(int))); var addRow = dt.NewRow();addRow["id"] = 1;addRow["fk_id_1"] = DBNull.Value;addRow["fk_id_2"] = 2;dt.Rows.Add(addRow); addRow = dt.NewRow();addRow["id"] = 2;addRow["fk_id_1"] = 2 ;addRow["fk_id_2"] = DBNull.Value;dt.Rows.Add(addRow); BDb.Fastest<DataTable>().AS("Test").BulkMerge(dt, new string[] { "id" }, false);
}
}
[SugarTable(
"test"
)]
public
class
Test
{
[SugarColumn(IsPrimaryKey =
true,ColumnName = "id"
)]
public
int
Id {
get
;
set
; }
[
SugarColumn(
ColumnName = "fk_id_1"
)]
public
int
? fk_id_1{
get
;
set
; }
[
SugarColumn(
ColumnName = "fk_id_2"
)]
public
int? fk_id_2{
get
;
set
; }
}
}
热忱回答(15)
-
杰坦言 VIP0
2024/7/10CONSTRAINT check_test_fk_id CHECK ((((fk_id_1 IS NULL) AND (fk_id_2 IS NOT NULL)) OR ((fk_id_1 IS NOT NULL) AND (fk_id_2 IS NULL)))),
应该是这个键约束导致
0 回复 -
杰坦言 VIP0
2024/7/10var lstTests = new List<Test>(); lstTests.Add(new Test() { Id = 1, Fk_id_1 = null, Fk_id_2 = 2 }); lstTests.Add(new Test() { Id = 2, Fk_id_1 = 2, Fk_id_2 = null }); BDb.Fastest<Test>().BulkMerge(lstTests);
使用这种指定实体方式正常,使用
BulkMerge(DataTable, new string[],Boolen)不指定实体,有键约束CONSTRAINT check_test_fk_id CHECK ((((fk_id_1 IS NULL) AND (fk_id_2 IS NOT NULL)) OR ((fk_id_1 IS NOT NULL) AND (fk_id_2 IS NULL)))),异常
0 回复 -
fate sta VIP0
2024/7/10我这边验证一下,看着像是主键不能为null
0 回复 -
杰坦言 VIP0
2024/7/10应该不是主键的问题
0 回复 -
杰坦言 VIP0
2024/7/10请问有进展吗
0 回复 -
shelcon VIP0
2024/7/10顶
0 回复 -
fate sta VIP0
2024/7/10你的DEMO我成功运行,并没有报错。
0 回复 -
shelcon VIP0
2024/7/11CONSTRAINT check_test_fk_id CHECK ((((fk_id_1 IS NULL) AND (fk_id_2 IS NOT NULL)) OR ((fk_id_1 IS NOT NULL) AND (fk_id_2 IS NULL))))
你创建表的语句有这个键约束吗?我上面已经po了建表语句
0 回复 -
shelcon VIP0
2024/7/11fk_id_1和 fk_id_2这两个字段不能同时为空
0 回复 -
shelcon VIP0
2024/7/11我这边试的是不行
0 回复 -
fate sta VIP0
2024/7/12@shelcon:我测试了不行,bulkcopy直接插入不进去。不用merge 直接插入也不行
0 回复 -
fate sta VIP0
2024/7/12应该是无法支持
0 回复 -
fate sta VIP0
2024/7/12应该是转成了0所以报错了。
0 回复 -
fate sta VIP0
2024/7/12你约束在加个or 都不为空试试
0 回复 -
fate sta VIP0
2024/7/12SqlSugarCore 5.1.4.163-preview01
已修复 过五分钟后更新到新预览版本
0 回复