【问题标题】:LINQ to DataSet with strongly typed data after migration from .NET 3.5 to 4.0从 .NET 3.5 迁移到 4.0 后具有强类型数据的 LINQ to DataSet
【发布时间】:2015-04-14 07:32:57
【问题描述】:

我正在将我们的项目从 .NET 3.5 迁移到 .NET 4.0。 以前我曾经能够在类型化数据集上使用语句,例如:

dr = myDataSet.SomeTable.FirstOrDefault(Function(x) x.IdSome = targetId)

然而,这不再有效。 我已经尝试添加对System.Data.DataSetExtensions 的引用并修改代码以使用.AsEnumerable() - 但是,这只会产生DataRow,而不是SomeRow(将包含在SomeTable 中)

dr = myDataSet.SomeTable.AsEnumerable().FirstOrDefault(Function(x) x.IdSome = targetId)

产生的错误是 'IdSome' is not a member of 'System.Data.DataRow' - 由于同样的原因,其他一些语句失败并返回 Overload resolution failed

如何在 .NET 4.0 中保留类型安全、非魔法的字符串代码?

【问题讨论】:

  • 您是使用数据集来访问数据库还是某些 xml?
  • 数据库 - 但过滤器可能发生在客户端(架构:Windows 窗体客户端、远程处理、ADO.NET 数据适配器。不会很快改变,所以 DataSet 会保留一段时间)。 IE。我不能只使用 LINQ to XML。
  • 您是否引用了适当的程序集并导入了适当的命名空间?

标签: .net vb.net linq-to-dataset


【解决方案1】:

原来数据集在转换过程中被弄乱了。重新生成它们后(在设计器中打开一个,在所有数据集上“运行自定义工具”)修复了继承。

另请参阅:Typed Dataset not using TypedTableBase in .NET 4

【讨论】:

  • 我仍然建议使用 Entity Framework 和 Linq2Entities...如果这只是一个迁移,这没关系,但如果您开发新项目,请务必考虑一下。从长远来看,它更容易处理。
  • 别担心,我们已经在较新的项目中使用 EF。但老实说,开箱即用的更改跟踪、轻松绑定等与 ADO.NET 仍然非常整洁。这并不像看起来那么糟糕。
  • 我不怀疑...我与两者都合作过。在大多数情况下,较新的技术更加灵活,但这也取决于您的要求
  • 我会接受您自己的答案,以便其他用户可以看到您自己解决了问题
  • 我只能在两天内完成 :)
【解决方案2】:

不知道为什么它不适合你,但这对我有用:

Sub Main()
    Dim ds As New DataSet1

    ds.SomeTable.AddSomeTableRow("SomeDescription")
    ds.AcceptChanges()

    Dim dr As DataSet1.SomeTableRow = ds.SomeTable.FirstOrDefault(Function(x) x.Id = 1)

    Console.WriteLine(dr.Id)
    Console.WriteLine(dr.Description)

End Sub

【讨论】:

  • 我引用了 System.Core;系统.数据; System.Data.DataSetExtensions... 我认为这就是你所需要的
  • 您可能会遇到使用旧版本的问题...但是您的错误列表中应该有警告
  • 顺便说一句,您也可以将客户端过滤与实体框架一起使用... linq 2 实体接受您的查询并生成 sql 语句并将结果映射到您可以呈现的对象...这是一种更多的状态艺术方法,易于实施
  • 我们已经在为那个项目开发一个新的架构,但是现有的代码库不会被迁移到一个新的架构上。这是一个相当大的代码库(长期运行的项目)。将其重构为新架构风险太大 - 新东西将使用新架构。
  • @urbanhusky 还研究了存储库模式...您可以更轻松地封装数据访问和迁移(即使在大型项目中)到新技术
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2011-06-29
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多