2017-10-22 8 views
2

와 SQL에 나열 나는 다음과 같은 두 테이블이 있습니다삽입 아이가 단정 한

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; } 
} 

아이디어는 내가하여 TestA 개체에서하여 TestA 관련된 모든를 TestB 기록에 액세스 할 수 있습니다입니다. 내가 알아 내려고 노력하고 있어요 것은 내가를 TestB 여기 테스트 A에 관련된 여러 행이 특히, 테스트 A와를 TestB 모두에 삽입 어떻게 것은 내가 뭘하려 : 나는 우리가 말끔 해 줄 수 있다는 것을 알고

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); 
} 

목록을 작성하면 해당 목록을 열거하고 개별 레코드를 삽입 할만큼 똑똑하지만 개체의 자식 인 경우 동일한 작업을 수행하려면 어떻게해야합니까? 내 값을 @Test.Id, @Test.TestAId으로 만들려고했으나 정확히 같은 오류가있었습니다.

형 Test.TestB의 회원은 당신이 시도 할 수있는 매개 변수 값

답변

0

으로 사용할 수 없습니다 :

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); 
    } 
} 
+1

내가 할 수있는 방법이 있는지 알아 내려고했다 Dapper가 모든 것을 처리합니다. 불가능할 것 같아요. 또한 루핑 대신에'conn.Execute (processQuery, data.Test); 할 수 있습니다. '목록을 가져 와서 삽입 쿼리를 생성하고 실행하는 것만으로도 똑똑합니다. – Bojan