私は MVC が大好きですが、残念ながらすべてのチュートリアル、デモ、およびすべてのリソースで Entity Framework を使用して ViewData を生成し、ほとんどの場合、DataSet の代わりに LINQ to SQL を使用しています。
私は既存のビジネス ロジックを再利用しており、クライアント (彼自身が優れたコーダーである) はデータセットを使い続けたいと考えているため、これらから離れることはできません。
データベースで NULL が許可されている列を含むテーブルが 1 つあります。これらにアクセスしようとすると、null かどうかを確認するために例外が発生します。
「テーブル 'FNN_CARRIERS_DESC' の列 'FNN_CARRIERS_DESC' の値は DBNull です」
これは、dataset.designer.vb ファイルによって生成されます。
私はあなたが何を言おうとしているのか知っています。"FNN_BRAND IS Null!!!" そしてそれは本当です。しかし...スタックトレースに従ってください。このエラーを生成しているコードの行は次のとおりです。
<%= Html.TextBox("FNN_CARRIERS_DESCTextBox", If(IsNothing(Model.FNN_CARRIERS_DESC), Model.FNN_CARRIERS_DESC, ""))%>
ガイダンスをいただければ幸いです。私の直感では、これは厳密には MVC の問題ではなく、データセットについて理解していない可能性があります。
これは、例外をスローする reference.vb ファイル内のコードです。
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")> _
Public Property FNN_CARRIERS_DESC() As String
Get
Try
Return CType(Me(Me.tableVIT_FNN_CommsService.FNN_CARRIERS_DESCColumn),String)
Catch e As Global.System.InvalidCastException
Throw New Global.System.Data.StrongTypingException("The value for column 'FNN_CARRIERS_DESC' in table 'VIT_FNN_CommsService' is DBNul"& _
"l.", e)
End Try
End Get
Set
Me(Me.tableVIT_FNN_CommsService.FNN_CARRIERS_DESCColumn) = value
End Set
End Property
私が試したこと:
- 例外をコメントアウトすると、null が返されますが、これは私が望むものですが、テーブルが変更されるか、テーブル結果を生成するストアド プロシージャが変更されると、データセットが再構築されます。
- データテーブルの列のルールを変更しました。実際には結果が得られず、テーブルの再生成でもオーバーライドされます。
- IsNothing(column) または isDBnull(column) は、列が取得およびキャストされているため、実際にはエラーを引き起こします。
これを解決する最善の方法を知る必要があります。うまくいけば、MVC アーキテクチャを維持する必要があります。
仲間のオタクを助けてください... あなたは私の唯一の希望です!