我喜欢 MVC,但不幸的是,所有教程、演示和所有资源都使用实体框架来生成 ViewData,并且大多数使用 LINQ to SQL 而不是 DataSets。
我正在重用现有的业务逻辑,而客户(他本身就是一个伟大的编码员)想要继续使用数据集......所以我无法摆脱这些。
我有一张表,其中包含在数据库中允许为 NULL 的列。当我尝试访问这些......甚至检查它是否为空时,我得到一个异常:
“表 'FNN_CARRIERS_DESC' 中列 'FNN_CARRIERS_DESC' 的值为 DBNull”
现在这是由 dataset.designer.vb 文件生成的。
我知道你要说什么。“FNN_BRAND 为空!!!” 这是真的。但是...按照堆栈跟踪,我的代码中产生此错误的行是这样的:
<%= 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 架构保持一致。
帮助我的书呆子们......你是我唯一的希望!