Ich habe folgende 2 Tabellen:
public class TestA
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<TestB> Test { get; set; }
}
public class TestB
{
public int Id { get; set; }
public int TestAId { get; set; }
}
Die Idee ist, dass ich auf alle TestB-Datensätze zugreifen kann, die mit TestA von meinem TestA-Objekt in Verbindung stehen. Was ich versuche herauszufinden, ist, wie ich sowohl Test A als auch TestB einfügen kann, besonders wenn TestB mehrere Zeilen hat, die sich auf Test A beziehen. Hier ist, was ich versucht habe:
var data = new TestA
{
Name = "ABC",
Id = 1,
Test = new List<TestB>
{
new TestB() { Id = 1, TestAId = 1},
new TestB() {Id = 2, TestAId = 1},
new TestB() {Id = 3, TestAId = 1}
}
};
var query = "INSERT INTO TestA(Id, Name) VALUES(@Id, @Name) INSERT INTO TestB(Id, TestAId) VALUES(@Test.TestB.Id, @Test.TestB.TestAId)";
using (var con = conn)
{
con.Execute(query, data);
}
Ich weiß, dass wir dapper eine Liste geben können und es klug genug ist, diese Liste aufzuzählen und einzelne Datensätze einzufügen, aber wie erreiche ich das Gleiche, wenn diese Liste ein Kind eines Objekts ist? Ich habe versucht, meine Werte auch @Test.Id, @Test.TestAId
aber es hatte genau denselben Fehler.
Das Member vom Typ Test.TestB kann nicht als Parameterwert verwendet werden
Könnten Sie das versuchen:
var data = new TestA
{
Name = "ABC",
Id = 1,
Test = new List<TestB>
{
new TestB() { Id = 1, TestAId = 1},
new TestB() {Id = 2, TestAId = 1},
new TestB() {Id = 3, TestAId = 1}
}
};
var query = "INSERT INTO TestA(Id, Name) VALUES(@Id, @Name) INSERT INTO TestB(Id, TestAId) VALUES(@Test.TestB.Id, @Test.TestB.TestAId)";
using (var con = conn)
{
var query = "INSERT INTO TestA(Id, Name) VALUES(@Id, @Name)";
con.Execute(query, new { Id = data.Id, Name = data.Name });
foreach (var item in data.Test)
{
string processQuery = "INSERT INTO TestB(Id, TestAId) VALUES (@Id, @TestAId )";
connection.Execute(processQuery, item);
}
}