【发布时间】:2013-10-12 21:42:03
【问题描述】:
我需要从数据库表中自动获取DataSet,我使用了内部Visual Studio工具,在创建的数百万行之间,这是访问器方法之一:
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
public string Referente {
get {
try {
return ((string)(this[this.tableCATALOGO_Cliente.ReferenteColumn]));
}
catch (global::System.InvalidCastException e) {
throw new global::System.Data.StrongTypingException("The value for column \'Referente\' in table \'CATALOGO_Cliente\' is DBNull.", e);
}
}
set {
this[this.tableCATALOGO_Cliente.ReferenteColumn] = value;
}
}
如您所见,此代码引用Referente 列。当我需要获得一个通用的Referente 如果是NULL 时,return 不会发生,因为会引发异常。
我解决了将 return 语句替换为:
return this[this.tableCATALOGO_Cliente.ReferenteColumn] as string;
由于该表包含数百列,因此我将采用一种自动处理此过程的方法(即,如果发生IS NULL,我将使用不会引发异常的访问器方法生成一个DataSet)。
【问题讨论】:
-
首先,编辑生成的代码是个坏主意,除非您永远不想刷新该文件以反映更改。其次,为什么
DataSets?特别是,为什么键入DataSets?这是一种非常可怕的方法,IMO。我通常不建议DataSet除非有充分的理由,但 typedDataSets 充满 痛苦。 IMO,一个简单的 POCO / DTO 在这里会是一个更好的选择(尽管有问题的标题,键入DataSet离成为 DTO 还很远)。 -
我使用了dataSet,因为它很容易被框架生成。我很乐意用尽可能少的设置替换一些更简单的东西。
-
如果您追求“由框架轻松生成” - 我建议您查看 LINQ-to-SQL 或实体框架。
标签: .net strongly-typed-dataset