ビューと smallint フィールドを持つ SQL Server テーブルがあります。ビュー内のすべてのデータは、ビュー内で指定できないため、Petapoco T4 ジェネレーターから自動的に null 可能としてマークされます。これまでのところ、他のすべてのデータ型 (guid、int、tinyint、string など) には問題ありませんが、null 許容の smallint がいくつかの問題を引き起こしているようです。
VB.NET の T4 ジェネレーターは、SMALLINT フィールドに対してこれを作成します。
Private mPasswordResetDays As Integer?
<Column> _
Public Property PasswordResetDays() As Integer?
Get
Return mPasswordResetDays
End Get
Set
mPasswordResetDays = Value
End Set
End Property
しかし、私は例外を受け取ります:
「System.Int16」から「System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]」へのキャスト
ペタポコ ライン 2677:
Line 2675: else
Line 2676: {
Line 2677: converter = src => Convert.ChangeType(src, dstType, null);
Line 2678: }
Line 2679: }
PetaPoco から実行される SQL コマンドは非常に単純です。
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 コマンドでも同様の問題が指摘されていると思いますが、行が異なり、コードも異なります。
タイプを整数から変更したら?整数に変換し、null 不可にすると、すべて正常に動作します。
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