보기 및 smallint 필드가있는 SQL Server 테이블이 있습니다. 뷰의 모든 데이터는 뷰에서 지정할 수 없으므로 Petapoco T4 생성기에서 자동으로 nullable로 표시됩니다. 지금까지 (guid, int, tinyint, string 등) 다른 모든 데이터 유형은 정상이지만 nullable smallint가 문제를 일으키는 것으로 보입니다.nullable SQl 서버와 Petapoco 문제 smallint 및 int16 in vb.net
Private mPasswordResetDays As Integer?
<Column> _
Public Property PasswordResetDays() As Integer?
Get
Return mPasswordResetDays
End Get
Set
mPasswordResetDays = Value
End Set
End Property
하지만 예외 수신 :
VB.NET에서 T4 발생기는 SMALLINT 필드 이것을 생성 System.Nullable`1 '에서'System.Int16 '[발
캐스트 [선택 System.Int32, mscorlib에, 버전 4.0.0.0 = 문화 = 중립 PublicKeyToken = b77a5c561934e089]] 2677 Petapoco 줄에
:
Line 2675: else
Line 2676: {
Line 2677: converter = src => Convert.ChangeType(src, dstType, null);
Line 2678: }
Line 2679: }
01,235,164 는 SQL 명령 PetaPoco에서 실행
은 매우 간단합니다 :
SQL Command: SELECT UserId, AllowPersistentCookie, MinPasswordLenght,
NonAlphanumericPasswordChars, AlphanumericPassword, PasswordResetDays FROM
EVA_vw_UserLoginStatusFromRoles
WHERE UserId = @0 -> @0 [String] = "d85674ab-d389-4548-ad89-5322892ca0e2"
나는 비슷한 문제가 null을 반환 ExecuteScalar는 명령에 언급 된 생각하지만 선은 다른과 코드도.
유형을 정수로 변경하면 어떻게됩니까? 정수로, nullable되지 않도록 모든 것이 잘 작동합니다.
Petapoco 및 SQL Server Smallints에 대한이 힌트에 대한 힌트가 있습니까?
칙은 : 뷰 코드는 다음과 같습니다
SELECT a.UserId, CAST(MIN(CAST(b.AllowPersistentCookie AS int)) AS bit) AS AllowPersistentCookie, MAX(b.MinPasswordLenght) AS MinPasswordLenght,
CAST(MAX(CAST(b.NonAlphanumericPasswordChars AS int)) AS bit) AS NonAlphanumericPasswordChars, CAST(MAX(CAST(b.AlphanumericPassword AS int)) AS bit)
AS AlphanumericPassword, MIN(b.PasswordResetDays) AS PasswordResetDays
FROM dbo.EVA_UsersInRoles AS a INNER JOIN
dbo.EVA_Roles AS b ON a.RoleId = b.RoleId
WHERE (DATEDIFF(day, CONVERT(date, GETUTCDATE()), a.StartDate) <= 0) AND (DATEDIFF(day, CONVERT(date, GETUTCDATE()), a.EndDate) >= 0) OR
(DATEDIFF(day, CONVERT(date, GETUTCDATE()), a.StartDate) <= 0) AND (a.EndDate IS NULL) OR
(DATEDIFF(day, CONVERT(date, GETUTCDATE()), a.EndDate) >= 0) AND (a.StartDate IS NULL) OR
(a.EndDate IS NULL) AND (a.StartDate IS NULL)
GROUP BY a.UserId
내가 아는 한 뷰 열을 SQL Server에서 null이 아닌 것으로 표현하는 방법은 없지만이 문제는 테이블 대신보기에서 데이터를 추출하는 것과 관련이 없다고 생각합니다. 문제는 smallint SQL Server 데이터 유형에서만 발생하며 다른 데이터 유형에서도 문제가 없습니다. 따라서 뷰 대신 기본 테이블에서 직접 nullable smallint에 액세스 할 때 같은 문제가 발생합니다. 내가 다시 시도해 볼 수는 있지만 꽤 논리적 인 것처럼 보인다. – Manight
보기 코드를 게시 할 수 있습니까? –
물론입니다. 내 메인 포스트를 편집하여보기를 추가했습니다. 그러나 문제는 Nullable smallint를 반환해야하기 때문에 뷰에 문제가 없다고 했으므로 문제는 PetaPoco가 nullable smallint/int16을 처리 할 때 발생합니다. 해결 방법 SQL Server 측은 매우 간단합니다 (뷰에 int로 캐스트하거나 기본 테이블 필드로 int로 변환). 그러나 PetaPoco에 대한 수정을 선호합니다 ... 이전에는 아무도 처리 할 Nullable smallint가 없었습니다. – Manight