gpt4 book ai didi

.net - 生成 LINQ to DB2?

转载 作者:行者123 更新时间:2023-12-04 04:27:37 24 4
gpt4 key购买 nike

我的工作中有一个现有的 DB2 数据库。 (至少,我认为它是 DB2。他们称它为“iSeries”,它在某些大型机硬件上看起来和感觉上都像 DB2。)多年来,我所在部门的 .NET 开发人员只是手动编写 ADO 命令和查询从特定表中获取特定数据等

目前,我正在构建一些基础设施来帮助简化我们内部软件的开发和支持,而我想要解决的一件事就是数据访问。我对那里的各种 ORM 工具有点陌生,但我熟悉 LINQ 语法,这就是我想要了解的地方。这就是我们现在所拥有的:

  • 具有许多表的已建立 DB2 数据库。
  • 代码中没有已建立的业务对象。
  • 表和任何潜在业务对象之间没有有用的关系。

  • 所以我想要做的是在代码和 DB2 数据库之间创建一个抽象层,开发人员基本上可以更流畅、更高效地完成他们已经在做的事情(获取数据和填充自定义对象)。也就是说,无需创建经典 ADO 对象并填充 DataSet,只需编写一个简单的 LINQ 语句,该语句返回一个匿名 IQueryable,其中包含用于填充自定义对象的字段。 (作为一个额外的奖励,我真的很喜欢当程序员搞砸一些东西而不是运行时错误时编译时错误的想法,就像当一个错字进入 SQL 命令字符串文字时发生的那样。另外,甚至不要让我从这里的 SQL 注入(inject)漏洞开始。)

    问题是,我还没有找到任何方法来实现这一点。我完全有可能忽略了一些简单的事情,如果是这种情况,那么我欢迎在正确的方向上稍微插入一下。但就目前而言,我在网上找到的所有内容都属于以下类别之一:
  • 是的,你可以做到这一点!您只需要一个没有下载链接的 IBM 驱动程序!
  • 这是一个方便的教程,用于为从头开始创建数据库的业务对象生成出色的 ORM。 (主要是 NHibernate,如果我可以将它用于我正在尝试做的事情,那将非常有用。)
  • 下载一些工具并生成您的 ORM。 (工具不支持 DB2,或声称支持但在我尝试时失败。)

  • 有没有人遇到过这样的事情?我是否以完全错误的方式接近它?任何关于此事的建议将不胜感激,谢谢。

    编辑:我要继续赏金这个。我已经和一些人谈过了,听起来“它还不能完成”仍然是可行的答案,但如果有人解决了这个问题并找到了解决方案,我很乐意听到它。

    更新:感谢下面的答案将我指向 DB_Linq 项目。实际上,我并没有花太多时间为此添加一些基本的 DB2 支持,现在我有了一个经过测试且可以工作的 LINQ to DB2 提供程序!目前它非常简单,并且非常适合我们的环境,因此还没有计划将其贡献回项目中。但希望我能够随着时间的推移使我的 fork 成熟并将其寄回。谢谢!

    最佳答案

    如果你不坚决反对做一些编码:-) 得到 LINQ to MySql, Oracle and Postgress并且修改它可能也会为您节省大量工作。请记住,LINQ to SQL 仍然使用相同的 ADO.NET 连接。

    请注意,LINQ to Entities 与 LINQ to SQL 不同,即使您让 IBM lib 工作,您首先必须检查是否允许您在没有大量校对的情况下对现有数据库使用它(它可以轻松跳闸并尝试修改现有数据库 - 如果您想深入了解该方面,请查看此线程:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/f3a5b27a-5b73-476a-8c38-1eaedc8f197c)。

    您也可以前往IBM's Entity Framework Beta thread (从一些人声称工作结果的结尾开始)。

    重要的是不要试图获得 MS SQL 获得的所有东西——你只需要表表示类,你就可以参加第一轮了。

    您可以尝试的另一件事是打开到 DB2 的正常 ADO.NET 连接(或者如果发现非 ODBC 连接过于窥探和敏感,则强制使用 ODBC)到 DB2,并尝试像 SQL Server 一样行事。如果结果是 SqlMetal同意使用您已经完成的连接 - 它将为您自动生成表表示类。

    如果它犹豫不决,您还需要 MS SQL Server,至少用于开发目的。对于从 DB2 中提取几个表的启动脚本,然后在 SQL Server 中创建,然后运行 ​​SqlMetal 并查看源代码。您会看到它为表表示创建了漂亮的氏族类,并且只是在它们上放置了大量但直接的属性——这意味着易于复制和粘贴,甚至可以通过好的脚本生成。一旦您看到一个小的自动生成文件的样子,您还会看到您可以将更多代码附加到提供的 Hook 或删除一些现有代码。检查 LINQ to MySql etc.再次。

    LINQ 本身只需要表表示类,因此您可以相当自由地根据自己的意愿制作自己的 System.Data.Linq.DataContext 派生类,我认为 DB2 中的模式几乎不会更改,因此您无需更改它太频繁了。 LINQ 总体上是一个非常开放的系统(许多 LINQ to something 库证明了这一点),这意味着如果修改 DataContext 导数还不够,您也可以接管整个 LINQ 表达式。

    一旦你有几个表的概念证明,你可能需要编写一个 perl 或 python 脚本(或 powershell 或 C#)来做一些正则表达式替换,如果 DB2-s 表创建脚本没有在 SQL Server 上完整运行(有总是有一些语法偏差),你真的采取了最合理的路线。

    关于.net - 生成 LINQ to DB2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3290167/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com