正在生成LINQ to DB2?

rkttyhzu  于 2023-04-20  发布在  DB2
关注(0)|答案(6)|浏览(212)

我的工作中有一个现有的DB2数据库。(至少,我认为它是DB2。他们称之为“iSeries”,它看起来和感觉上都像一些大型机硬件上的DB2。)多年来,我所在部门的.NET开发人员只是手动编写ADO命令和查询,以从特定的表等中获取特定的数据。
目前,我正在构建一些基础设施,以帮助简化我们内部软件的开发和支持,我想解决的一件事是数据访问。我对各种ORM工具有点陌生,但我熟悉LINQ语法,这是我想得到的。这是我们现在拥有的:
1.已建立的包含许多表的DB2数据库。
1.代码中没有已建立的业务对象。
1.表和任何潜在的业务对象之间没有有用的关系。
因此,我尝试在代码和DB2数据库之间创建一个抽象层,开发人员可以在其中完成他们已经完成的工作(抓取数据并填充自定义对象)更加流畅和高效。也就是说,不是创建经典的ADO对象并填充DataSet,只需编写一个简单的LINQ语句,返回一个匿名IQueryable,其中包含用于填充自定义对象的字段。(作为一个额外的好处,我真的很喜欢编译时错误的想法,当程序员把事情搞砸时,而不是运行时错误,就像当一个错字进入SQL命令字符串字面量时发生的那样。更别说SQL注入漏洞了。)
问题是,我还没能找到任何方法来实现这一点。我完全有可能忽略了一些简单的东西,如果是这样的话,我欢迎朝着正确的方向前进。但就目前而言,我在网上找到的所有东西都符合以下类别之一:
1.是的,你可以做到!你所需要的只是一个来自IBM的驱动程序,没有下载链接!
1.这里有一个很方便的教程,可以为你的业务对象生成一个很棒的ORM,从零开始创建一个数据库(主要是NHibernate,如果我能用它来做我想做的事情,那就太好了)。
1.下载一些工具并生成您的ORM。(工具不支持DB2,或者声称支持但我尝试时失败了。)
以前有人遇到过这样的事情吗?我是不是用一种完全错误的方式来处理它?任何关于这件事的建议都将非常感激,谢谢。
编辑:我会继续和赏金这一个。我已经和一些人谈过了,听起来“这还不能做”仍然是正在进行的答案,但如果有人已经解决了这个问题,并找到了解决方案,我很乐意听到它。
更新:感谢下面的答案,让我找到了DB_Linq项目。实际上,我并没有花太多的时间来添加一些基本的DB2支持,现在我有了一个经过测试和工作的LINQ to DB2提供程序!它现在非常简单,并且 * 非常 * 针对我们的环境进行了定制,所以还没有计划把它贡献回项目。但是希望我能够随着时间的推移成熟我的分支并把它送回来。谢谢!

sigwle7e

sigwle7e1#

如果你不是坚决反对做一些编码:-)获取LINQ to MySql, Oracle and Postgress并修改它可能也会保存你很多工作。记住LINQ to SQL仍然使用相同的ADO.NET连接。
注意LINQ to Entities和LINQ to SQL是不一样的,即使你让IBM库工作,你也必须首先检查你是否被允许在没有大量校对的情况下对现有的DB使用它(它很容易出错并试图修改现有的DB -如果你想深入研究它的那方面,请查看这个线程:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/f3a5b27a-5b73-476a-8c38-1eaedc8f197c)。
您还可以转到IBM的Entity Framework Beta线程(从一些ppl声称工作结果的末尾开始)。
重要的是不要试图得到MS SQL得到的所有东西-你只需要表表示类,你就可以开始第一轮了。
你可以尝试的另一件事是打开到DB2的普通ADO.NET连接(或者如果发现非ODBC连接过于敏感,则强制ODBC)到DB2,并试着像SQL Server一样工作。如果结果是SqlMetal同意使用该连接,那么你就基本完成了-它将自动为你生成表表示类。
如果它不起作用,您还需要MS SQL Server,至少用于开发目的。然后在SQL Server中创建,然后运行SqlMetal并查看源代码。您将看到它为表表示创建了漂亮的clan类,并在其上放置了大量但直接的属性-这意味着易于复制和粘贴,甚至可以通过良好的脚本生成。一旦你看到一个小的自动生成的文件是什么样子,你也会看到你可以附加更多的代码到提供的钩子上,或者删除一些现有的代码。
LINQ本身只需要表表示类,因此您可以相当自由地创建自己的System.Data.Linq.DataContext派生,几乎可以随心所欲,而且我认为DB2中的模式几乎从不更改,因此您不需要太频繁地更改它。(正如许多LINQ to something库所证明的那样)这意味着如果修改DataContext derivative还不够,您还可以接管整个LINQ表达式。
一旦有了几个表的概念证明,如果DB2-s的表创建脚本不能完整地在SQL Server上运行(总是有一些语法偏差),并且您真的必须采取logest路线,则可能需要编写一个perl或python脚本(或powershell或C#)来执行一个小的regex替换。

y4ekin9u

y4ekin9u2#

这是我要做的事情列表上的事情,因为我运行一个大的IBM DB2系统,并有。net开发人员。不是那么容易得到的驱动程序和插件为visual studio 2008/2010。
ORM -我知道(我读过)nHibernate和Entity Framework都支持DB2 SQL语法。nHibernate有一个更大的学习曲线,我们还没有决定是否要跳到这一点上。但是实体框架(新的)看起来非常好,目前针对SQL Server 2008使用,但也要考虑到DB2。
nhibernate和Entity框架都支持对它们运行LINQ,没有任何问题。
谢谢
西蒙

0wi1tuuw

0wi1tuuw3#

我不是DB2Maven,但这里有一些想法您可能见过,也可能没见过。

希望这能帮上忙。
祝你好运!

dldeef67

dldeef674#

对你来说答案很简单,是的,你能做到。怎么做?
1.下载DB2数据服务器客户机9.7并安装,替换所有旧的客户机。
1.您可能需要重写DB2的连接字符串。In C:\Program Files\IBM\SQLLIB\Bin\Testconn.exe将帮助您创建和测试连接字符串。
1.确保IBM.Data.Informix.dll处于工作状态。
1.使用VS 2008。到目前为止,VSAI for DB2 for VS2010尚未发布。
1.像其他数据库一样,为数据库创建ADO .NET实体模型- edmx文件。
1.数据库中很可能有大量表(DB2中最有可能),您必须从www.codeplex.com获取EDMGEN2.exe。您可能必须放置一个名为“Tables.txt”的文本文件,其中包含表、视图、Proceduce名称以及模式名称。EdmGen2.exe将使用此文本文件并仅为指定的表创建EDMX文件。稍后您可以添加其他表。

  1. IBM有一个支持站点,在那里他们介绍了由于DB2 SQL限制而导致的DB2client9.7中的Linq所支持的函数的限制。
hrirmatl

hrirmatl5#

我在当前项目中使用的解决方案是Microsoft SQL Server中的“链接服务器”,它通过OleDB链接到DB2数据库服务器。
在我的项目数据库中,我创建了镜像DB2表的视图,运行带有/views选项的sqlmetal.exe也会为这些表生成Map文件。
请注意,您需要手动更新Map,以便添加有关主键和可空字段的信息。
在我的项目中这样做是有意义的,因为我必须在DB2和SQL Server上读/写数据库,并且使用链接服务器,我可以在同一个ADO .NET连接上完成所有这些,同时向两个数据库提交更改。

ut6juiuv

ut6juiuv6#

你可以使用一个轻量级的ORM,比如dapper-dot-net.http://code.google.com/p/dapper-dot-net/

相关问题