【发布时间】:2021-09-26 07:32:27
【问题描述】:
下面是我要插入 SQL 的文件,我已经加载到一个 c# 对象 (MyObject) 中,我正在使用 Dapper,C#。 我的主表是 Person ,子表 Test 和 Staging 表包含 ID,PersonID,TestID 复合键
问题1:我不清楚如何将标签插入到 Person 中,因为标签是 Person 对象中的一个列表。
问题2:如何修复以下代码,因为我不清楚如何在 for each 循环中循环遍历实体 Test。我引用了Dapper many-to-many insert
{
"_id": "1",
"name": "Leiz Gab",
"tags": [
"tagA",
"tagB",
"tagC"
],
"tests": [
{
"id": 0,
"name": "A bsd"
},
{
"id": 1,
"name": "S Bsd"
}
]
}
我的代码:
class Program
{
static void Main(string[] args)
{
var cs = @"Server=DESKTOP-FSNG2D1;Database=msdb;Trusted_Connection=True;";
using var con = new SqlConnection(cs);
con.Open();
List<MyObject> processList = new List<MyObject>();
MyObject obj = new MyObject();
obj.A = "AB";
obj.B = "CD";
Test tst = new Test();
tst.Firstname = "A";
tst.Surname = "Avd";
Test tst1 = new Test();
tst1.Firstname = "B";
tst1.Surname = "Brgu";
obj.D.Add(tst);
obj.D.Add(tst1);
string pINSERT = "INSERT INTO [msdb].[dbo].[AzureBlob] VALUES(@A, @B, @C,@D)";
string tINSERT = "INSERT INTO [msdb].[dbo].[Test] VALUES(@Surname, @Firstname)";
string aINSERT = "INSERT INTO [msdb].[dbo].[Staging] (PersonID, TestID) VALUES(@PersonID, @TestID)";
var res = con.ExecuteScalarAsync(pINSERT);
foreach (var a in obj.D)
{
var testID = con.ExecuteScalarAsync<int>(tINSERT, a);
var arows = con.ExecuteAsync(aINSERT, new { PersonID = res, TestID = testID });
}
}
}
public class MyObject
{
public string A { get; set; }
public string B { get; set; }
public List<string> C { get; set; }
public List<Test> D new List<Test>();
}
public class Test
{
public int ID { get; set; }
public string Surname { get; set; }
public string Firstname { get; set; }
}
public class Staging
{
public int ID { get; set; }
public int PersonID { get; set; }
public int TestID { get; set; }
}
【问题讨论】:
-
obj.D 是您的测试列表,对吗?那么
foreach(var t in obj.D)? -
谢谢,尝试过,但出现以下错误,它不允许我添加到以下位置的列表中:
Test tst = new Test(); tst.Firstname = "A"; tst.Surname = "Avd"; Test tst1 = new Test(); tst1.Firstname = "B"; tst1.Surname = "Brgu"; obj.D.Add(tst); obj.D.Add(tst1);System.NullReferenceException: '对象引用未设置为对象的实例。 ' InsertRow.MyObject.D.get 返回 null。 -
我不明白你在说什么。您似乎已将问题中已经存在的代码粘贴到评论中,但没有解释任何内容。 编辑问题,这样代码就是你现在的样子,并指示哪一行给出了错误
-
@CaiusJard 当然,我已经用你的初始建议修改了代码
foreach (var a in obj.D)并尝试运行它,我得到空的 ReferenceException,它基本上不允许我将项目添加到列表中,你能请建议如何进一步进行。谢谢 -
我的朋友你的 D 列表当前未初始化。
标签: c# sql-server dapper