[seasar-dotnet:535] Re: Nullableカラムの自動生成 Insert、Updateで型キャストエラー
Ryo Miyagi
[E-MAIL ADDRESS DELETED]
2007年 7月 3日 (火) 13:13:00 JST
宮城です。
DBMSとNullables.dllに問題はないみたいです。
Seasar.NETのソースで気になっているのが
NHibernateNullableBaseType.GetBindValue(Object value)の部分で
as演算子でNullables.INullableTypeに変換している部分です。
as演算子は、参照型への変換しかできないが、NullableInt32は値型です。
おそらく、その箇所でInvalidCastExceptionが発生していると思いますが、
もう少し調べてみます。何で再現しないのだろう・・・
> 宮城 様
>
> お世話になります。
>
> 以下急ぎ連絡申し上げます。
>
> > (1) 使用しているDBMS
>
> SQL Server 2005(開発時は、Express)
>
> > (2) Nullables.dllのバージョンとファイルサイズ
>
> Seasar2に添付のものを使用しています
>
> Nullables.dll 52KB (Assembly Version 1.0.0.0)
>
> (3)については、少々確認に時間が必要なため、少々お待ちください。
>
>
> お手数をお掛けし恐縮に存じますがよろしくお願いいたします。
>
>
> ----- Original Message -----
> From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
> To: <[E-MAIL ADDRESS DELETED]>
> Sent: Tuesday, July 03, 2007 11:01 AM
> Subject: [seasar-dotnet:532] Re: Nullableカラムの自動生成 Insert、Updateで型
> キャストエラー
>
>
> > 宮城です。
> >
> > 清末さん、お手数ですが次の内容を確認していただけないでしょうか。
> >
> > (1) 使用しているDBMS
> > 例:SQL Server 2005
> >
> > (2) Nullables.dllのバージョンとファイルサイズ
> > プロジェクトで参照設定しているNullables.dllのバージョンとファイルサイ
> ズをお願いします。
> > ファイルサイズは、バイト単位までお願いします。
> >
> > (3) 例外発生時のNHibernateNullableBaseType.GetBindValue(Object value)の
> valueの値
> > Seasar.Dao.dllをデバッグビルドでコンパイルしたものと差し替えて
> > テスト対象のメソッドにブレークポイントを設定し、
> > 右クリックしてコンテキストメニューからTest With -> Debuggerで
> > ステップ実行ができると思います。
> >
> >
> > > 杉本です。
> > >
> > > こちらで用意したサンプルでOption Strict = "ON"としてみましたが、
> > > 特に問題はないようです。
> > >
> > > なにが原因でしょうねぇ・・
> > >
> > > 07/07/03 に KIYOSUE Minoruさんは書きました:
> > > > 杉本 様
> > > >
> > > > 早々に動作までして下さり大変ありがとうございます。
> > > >
> > > > Seasarのソースを追っていて気がついたのですが、今回のプロジェクトでは
> > > > 暗黙の型変換を不可(Option Strict = "ON")としています。
> > > >
> > > > このため、明示的に型を変換する必要があるのですが、これに問題はありま
> > > > せんか?
> > > >
> > > >
> > > >
> > > > ----- Original Message -----
> > > > From: "Kazuya Sugimoto" <[E-MAIL ADDRESS DELETED]>
> > > > To: <[E-MAIL ADDRESS DELETED]>
> > > > Sent: Monday, July 02, 2007 5:51 PM
> > > > Subject: [seasar-dotnet:529] Re:Nullableカラムの自動生成 Insert、
> Updateで型
> > > > キャストエラー
> > > >
> > > >
> > > > > 杉本です。
> > > > >
> > > > > 頂いたEntityクラスのソースをコピペして実行してみましたが、
> > > > > 再現しませんでした。BaseEntityは継承していませんが・・
> > > > > Nttb64CarEntityクラスには問題が無いようです。
> > > > >
> > > > > もしよろしければBaseEntityのソースも教えてもらえませんか?
> > > > >
> > > > > 07/07/02 に KIYOSUE Minoruさんは書きました:
> > > > > > 杉本様
> > > > > >
> > > > > > いつも大変お世話になっております。
> > > > > > また、連日お手数をお掛けし大変恐縮に存じます。
> > > > > > 以下Entityのソースです。
> > > > > >
> > > > > > Imports System
> > > > > > Imports Nullables
> > > > > >
> > > > > > Imports Seasar.Dao.Attrs
> > > > > > Imports BaseEntity = NtkProjectCore.entity.BaseEntity
> > > > > >
> > > > > > Namespace entity
> > > > > >
> > > > > > <Serializable()> _
> > > > > > <Table("nttb64Car")> _
> > > > > > Public Class Nttb64CarEntity
> > > > > > Inherits BaseEntity
> > > > > > Implements System.ICloneable
> > > > > >
> > > > > > ''' <summary>テーブルアノテーション </summary>
> > > > > > Public Const TABLE As String = "nttb64Car"
> > > > > >
> > > > > > ''' <summary>プライマリーキー項目配列 </summary>
> > > > > > Public Shared ReadOnly PKEYS As String() = New String() { _
> > > > > > "nt64CarMasterID, nt64CarNo1, nt64CarNo2,
> nt64CarNo3,
> > > > > > nt64CarNo4"}
> > > > > >
> > > > > > ''' <summary>
> > > > > > ''' 車両マスタID [nt64CarMasterID:int(4)](pkey)
> > > > > > ''' </summary>
> > > > > > Protected Friend int32Nt64CarMasterID As NullableInt32
> > > > > > ''' <summary>
> > > > > > ''' 車両番号1 [nt64CarNo1:VARCHAR(10)](pkey)
> > > > > > ''' </summary>
> > > > > > Protected Friend strNt64CarNo1 As String
> > > > > > ''' <summary>
> > > > > > ''' 車両番号2 [nt64CarNo2:VARCHAR(3)](pkey)
> > > > > > ''' </summary>
> > > > > > Protected Friend strNt64CarNo2 As String
> > > > > > ''' <summary>
> > > > > > ''' 車両番号3 [nt64CarNo3:VARCHAR(2)](pkey)
> > > > > > ''' </summary>
> > > > > > Protected Friend strNt64CarNo3 As String
> > > > > > ''' <summary>
> > > > > > ''' 車両番号4 [nt64CarNo4:VARCHAR(4)](pkey)
> > > > > > ''' </summary>
> > > > > > Protected Friend strNt64CarNo4 As String
> > > > > > ''' <summary>
> > > > > > ''' 登録日_西暦 [nt64RegistDateSEIREKI:DATETIME(8)]
> > > > > > ''' </summary>
> > > > > > Protected Friend dtmNt64RegistDateSEIREKI As
> NullableDateTime
> > > > > >
> > > > > > ''' <summary>
> > > > > > ''' 車両マスタID [nt64CarMasterID:int(4)](pkey)の設定、
> 取得
> > > > > > ''' <param name="_value"> 車両マスタID </param>
> > > > > > ''' <returns> 車両マスタID </returns>
> > > > > > ''' </summary>
> > > > > > <Column("nt64CarMasterID")> _
> > > > > > Public Overridable Property Nt64CarMasterID As
> NullableInt32
> > > > > > Set(ByVal _nt64CarMasterID As NullableInt32)
> > > > > > Me.int32Nt64CarMasterID = _nt64CarMasterID
> > > > > > End Set
> > > > > > Get
> > > > > > Return Me.int32Nt64CarMasterID
> > > > > > End Get
> > > > > > End Property
> > > > > >
> > > > > > ''' <summary>
> > > > > > ''' 車両番号1 [nt64CarNo1:VARCHAR(10)](pkey)の設定、取
> 得
> > > > > > ''' <param name="_value"> 車両番号1 </param>
> > > > > > ''' <returns> 車両番号1 </returns>
> > > > > > ''' </summary>
> > > > > > <Column("nt64CarNo1")> _
> > > > > > Public Overridable Property Nt64CarNo1 As String
> > > > > > Set(ByVal _nt64CarNo1 As String)
> > > > > > Me.strNt64CarNo1 = _nt64CarNo1
> > > > > > End Set
> > > > > > Get
> > > > > > Return Me.strNt64CarNo1
> > > > > > End Get
> > > > > > End Property
> > > > > >
> > > > > > ''' <summary>
> > > > > > ''' 車両番号2 [nt64CarNo2:VARCHAR(3)](pkey)の設定、取得
> > > > > > ''' <param name="_value"> 車両番号2 </param>
> > > > > > ''' <returns> 車両番号2 </returns>
> > > > > > ''' </summary>
> > > > > > <Column("nt64CarNo2")> _
> > > > > > Public Overridable Property Nt64CarNo2 As String
> > > > > > Set(ByVal _nt64CarNo2 As String)
> > > > > > Me.strNt64CarNo2 = _nt64CarNo2
> > > > > > End Set
> > > > > > Get
> > > > > > Return Me.strNt64CarNo2
> > > > > > End Get
> > > > > > End Property
> > > > > >
> > > > > > ''' <summary>
> > > > > > ''' 車両番号3 [nt64CarNo3:VARCHAR(2)](pkey)の設定、取得
> > > > > > ''' <param name="_value"> 車両番号3 </param>
> > > > > > ''' <returns> 車両番号3 </returns>
> > > > > > ''' </summary>
> > > > > > <Column("nt64CarNo3")> _
> > > > > > Public Overridable Property Nt64CarNo3 As String
> > > > > > Set(ByVal _nt64CarNo3 As String)
> > > > > > Me.strNt64CarNo3 = _nt64CarNo3
> > > > > > End Set
> > > > > > Get
> > > > > > Return Me.strNt64CarNo3
> > > > > > End Get
> > > > > > End Property
> > > > > >
> > > > > > ''' <summary>
> > > > > > ''' 車両番号4 [nt64CarNo4:VARCHAR(4)](pkey)の設定、取得
> > > > > > ''' <param name="_value"> 車両番号4 </param>
> > > > > > ''' <returns> 車両番号4 </returns>
> > > > > > ''' </summary>
> > > > > > <Column("nt64CarNo4")> _
> > > > > > Public Overridable Property Nt64CarNo4 As String
> > > > > > Set(ByVal _nt64CarNo4 As String)
> > > > > > Me.strNt64CarNo4 = _nt64CarNo4
> > > > > > End Set
> > > > > > Get
> > > > > > Return Me.strNt64CarNo4
> > > > > > End Get
> > > > > > End Property
> > > > > >
> > > > > > ''' <summary>
> > > > > > ''' 登録日_西暦 [nt64RegistDateSEIREKI:DATETIME(8)]の設
> 定、取
> > > > 得
> > > > > > ''' <param name="_value"> 登録日_西暦 </param>
> > > > > > ''' <returns> 登録日_西暦 </returns>
> > > > > > ''' </summary>
> > > > > > <Column("nt64RegistDateSEIREKI")> _
> > > > > > Public Overridable Property Nt64RegistDateSEIREKI As
> > > > > > NullableDateTime
> > > > > > Set(ByVal _nt64RegistDateSEIREKI As NullableDateTime)
> > > > > > Me.dtmNt64RegistDateSEIREKI =
> _nt64RegistDateSEIREKI
> > > > > > End Set
> > > > > > Get
> > > > > > Return Me.dtmNt64RegistDateSEIREKI
> > > > > > End Get
> > > > > > End Property
> > > > > >
> > > > > > End Class 'Nttb64CarEntity
> > > > > > End Namespace 'entity
> > > > > >
> > > > > > よろしくお願いします。
> > > > > >
> > > > > > ----- Original Message -----
> > > > > > From: "Kazuya Sugimoto" <[E-MAIL ADDRESS DELETED]>
> > > > > > To: <[E-MAIL ADDRESS DELETED]>
> > > > > > Sent: Monday, July 02, 2007 11:54 AM
> > > > > > Subject: [seasar-dotnet:527] Re:Nullableカラムの自動生成 Insert、
> Update
> > > > で型
> > > > > > キャストエラー
> > > > > >
> > > > > >
> > > > > > > 杉本です。
> > > > > > >
> > > > > > > Entityクラスのソースコードを見せて頂いてもよろしいでしょうか?
> > > > > > >
> > > > > > > ちなみにVersionNoの場合は次のバージョンまで、NullableInt32には対
> 応
> > > > > > > しておりません。でもNullableDatetimeもエラーになるとのことですの
> で、
> > > > > > > 原因は他にありそうですね。
> > > > > > >
> > > > > > > 07/07/01 に KIYOSUE Minoru さんは書きました:
> > > > > > > > 度々の質問で大変恐縮に存じます、清末です。
> > > > > > > >
> > > > > > > > DAOのS2UnitTestを開始し、Null可の項目を作成し、実行したところ
> > > > > > > > 次のエラーとなってしまいます。
> > > > > > >
> > > > > > > > 同様に、NullableDatetimeを指定したカラムもエラーとなってしまい
> ます。
> > > > > > > >
> > > > > > > > VS2005 の場合、Nullable を使用しないで、Nullable(Of Int32) を
> 使用し
> > > > た
> > > > > > > > 方が良いのでしょうか?ご教授お願い申し上げます。
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Kazuya Sugimoto
> > > > > > > Microsoft MVP Visual Developer - Solutions Architect
> > > > > > > http://d.hatena.ne.jp/sugimotokazuya/
> > > > > > > _______________________________________________
> > > > > > > seasar-dotnet mailing list
> > > > > > > [E-MAIL ADDRESS DELETED]
> > > > > > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > > > >
> > > > > >
> > > > > > _______________________________________________
> > > > > > seasar-dotnet mailing list
> > > > > > [E-MAIL ADDRESS DELETED]
> > > > > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Kazuya Sugimoto
> > > > > Microsoft MVP Visual Developer - Solutions Architect
> > > > > http://d.hatena.ne.jp/sugimotokazuya/
> > > > > _______________________________________________
> > > > > seasar-dotnet mailing list
> > > > > [E-MAIL ADDRESS DELETED]
> > > > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > > >
> > > >
> > > > _______________________________________________
> > > > seasar-dotnet mailing list
> > > > [E-MAIL ADDRESS DELETED]
> > > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > > >
> > >
> > >
> > > --
> > > Kazuya Sugimoto
> > > Microsoft MVP Visual Developer - Solutions Architect
> > > http://d.hatena.ne.jp/sugimotokazuya/
> > > _______________________________________________
> > > seasar-dotnet mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >
> >
> >
> > _______________________________________________
> > seasar-dotnet mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
seasar-dotnet メーリングリストの案内