IEnumerable을 삽입하는 방법 <T> dapper-dot-net을 사용한 콜렉션

c# dapper insert vb.net

문제

네, dapper-dot-net으로 레코드를 삽입하는 방법에 대한 질문이 여기있습니다 . 그러나 유익한 답변은 올바른 방향으로 나를 가리키는 것처럼 보이지 않았습니다. 여기 상황이 있습니다 : SqlServer에서 MySql으로 데이터 이동. 레코드를 IEnumerable<WTUser> 로 읽는 것은 쉽지만, 삽입물에는 뭔가를 얻지 못하고 있습니다. 첫째, 'moving records code':

Public Class WTUser
    //    edited for brevity - assume the following all have public get/set methods
    Public ActiveYN As String
    Public ResourceID As Integer
    Public ResourceRate As Integer
    Public ResourceType As Integer
    Public WindowsName As String
    Public ResourceName As String

End Class

cnn.Query 및 cnn.Execute는 dapper 확장 메소드를 호출합니다. 이제 WTUser 클래스 (참고 : 열 이름이 SqlServer의 'WindowsName'에서 MySql의 'ResourceName'으로 변경되었으므로 같은 필드를 가리키는 두 개의 속성이 나타납니다).

Public Class WTUser
    //    edited for brevity - assume the following all have public get/set methods
    Public ActiveYN As String
    Public ResourceID As Integer
    Public ResourceRate As Integer
    Public ResourceType As Integer
    Public WindowsName As String
    Public ResourceName As String

End Class

나는 dapper로부터 예외를 받고 있습니다 : "WTUser는 Dapper가 지원하지 않습니다." DataMapper (dapper)의이 메소드는 다음과 같습니다.

Public Class WTUser
    //    edited for brevity - assume the following all have public get/set methods
    Public ActiveYN As String
    Public ResourceID As Integer
    Public ResourceRate As Integer
    Public ResourceType As Integer
    Public WindowsName As String
    Public ResourceName As String

End Class

이 시점에서 OwnerType =

System.Collections.Generic.List`1 [[CRMBackEnd.WTUser, CRMBE, 버전 = 1.0.0.0, 문화 = 중립, PublicKeyToken = null]], mscorlib, 버전 = 2.0.0.0, 문화 = 중립, PublicKeyToken = b77a5c561934e089

OwnerType이 CRMBackEnd.WTUser ... not List<CRMBackEnd.WTUser> . 무슨 일이 일어나고있는 것은 컬렉션 속성이 반복되고 있다는 것입니다 : 백작, 용량 등 무엇이 누락 되었습니까?

최신 정보

session.WriteData를 다음과 같이 수정 한 경우 :

Public Class WTUser
    //    edited for brevity - assume the following all have public get/set methods
    Public ActiveYN As String
    Public ResourceID As Integer
    Public ResourceRate As Integer
    Public ResourceType As Integer
    Public WindowsName As String
    Public ResourceName As String

End Class

레코드가 멋지게 삽입됩니다 ...하지만 나는 이것이 필요한 예제가 주어진 것이라고 생각하지 않았다 :

Public Class WTUser
    //    edited for brevity - assume the following all have public get/set methods
    Public ActiveYN As String
    Public ResourceID As Integer
    Public ResourceRate As Integer
    Public ResourceType As Integer
    Public WindowsName As String
    Public ResourceName As String

End Class

... dapper-dot-net에서

수락 된 답변

방금이 테스트를 추가했습니다.

class Test
{
   public int Id { get; set; }
   public User User {get; set;}
}

cnn.Query("select * from Tests where Id = @Id", new Test{Id = 1}); // used to go boom 

광고 된대로 작동합니다. 다중 exec가 작동하는 방식에 대한 몇 가지 수정안을 만들었습니다. (그래서 좀 더 빨라서 객체 []를 지원합니다.)

내 생각 WTUser 모든 필드에 getter 속성이 누락되어 문제가 발생 WTUser 입니다. 모든 매개 변수에는 판독기 속성이 있어야하며 필드에서 가져 오는 기능을 지원하지 않습니다. 효율적인 구문 분석을 위해 복잡한 구문 분석 단계가 필요합니다.


문제가 발생한 추가 지점은 지원되지 않는 매핑이있는 매개 변수를 전달하는 것입니다.

예를 들어, 다음 클래스는 param으로 지원되지 않습니다.

class Test
{
   public int Id { get; set; }
   public User User {get; set;}
}

cnn.Query("select * from Tests where Id = @Id", new Test{Id = 1}); // used to go boom 

문제는 dapper가 SQL을 구문 분석하지 않았기 때문에 모든 소품이 params로 설정할 수 있지만 User 의 SQL 유형을 확인할 수 없다고 가정 한 것입니다.

최근 레브가 이것을 해결합니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.