Dav*_*vid 9 .net db2 orm data-access-layer
我的工作中有一个现有的DB2数据库.(至少,我认为它是DB2.它们将它称为"iSeries",它在某些大型机硬件上看起来和感觉就像DB2.)多年来我部门的.NET开发人员只需手动编写ADO命令和查询从特定表格等获取特定数据
目前,我正在构建一些基础架构,以帮助简化内部软件的开发和支持,我想解决的一件事就是这种数据访问.我对各种ORM工具有点新意,但我熟悉LINQ语法,这就是我想要的.这就是我们现在所拥有的:
所以我要做的是在代码和DB2数据库之间创建一个抽象层,开发人员可以基本上更加流畅有效地完成他们已经做的事情(抓取数据并填充自定义对象).也就是说,不要创建经典的ADO对象并填充DataSet,只需编写一个简单的LINQ语句,该语句返回一个匿名的IQueryable,其中包含填充自定义对象的字段.(作为一个额外的好处,我真的很喜欢编译时错误的想法,当程序员弄乱了一些东西而不是运行时错误时,就像打字输入到SQL命令字符串文字时那样.而且,甚至不让我这里开始讨论SQL注入漏洞.)
问题是,我还没有找到任何方法来实现这一目标.完全有可能我忽略了一些简单的事情,如果是这样的话,那么我欢迎在正确的方向上稍微推动一下.但是,我发现在线的所有内容都符合以下类别之一:
以前有人碰到这样的事吗?我是以完全不正确的方式接近它吗?对此事的任何建议都将不胜感激,谢谢.
编辑:我将继续前进,并为此提供赏金.我和一些人谈过,听起来"它还不能完成"仍然是回答,但如果有人解决这个问题并找到了解决方案,我很乐意听到.
更新:感谢下面的答案指向我的DB_Linq项目.实际上我没有花太多时间为它添加一些基本的DB2支持,现在我有一个经过测试和工作的LINQ to DB2提供程序!它现在非常简单,并且非常适合我们的环境,因此没有计划将其贡献给项目.但希望我能够随着时间的推移成熟我的叉子并将其发回.谢谢!
如果您不坚决反对进行一些编码:-) 获取LINQ to MySql、Oracle 和 Postgress并对其进行修改可能也会为您节省大量工作。请记住,LINQ to SQL 仍然使用相同的 ADO.NET 连接。
请注意,LINQ to Entities 与 LINQ to SQL 不同,即使您使 IBM 库正常工作,您也必须首先检查是否允许您在现有数据库上使用它,而无需进行大量验证(它可以轻松旅行并尝试修改现有数据库 - 如果您想深入研究该方面,请查看此线程:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/f3a5b27a-5b73-476a -8c38-1eaedc8f197c )。
您还可以转到IBM 的 Entity Framework Beta 线程(从某些人声称工作结果的末尾开始)。
重要的是不要试图获得 MS SQL 所获得的一切 - 您只需要表表示类,并且您可以顺利进行第一轮。
您可以尝试的另一件事是打开到 DB2 的正常 ADO.NET 连接(或者如果发现非 ODBC 连接太窥探和敏感,则强制使用 ODBC)到 DB2,并尝试像 SQL Server 一样运行。如果事实证明SqlMetal同意使用该连接,那么您就已经完成了 - 它将为您自动生成表表示类。
如果它犹豫不决,您还需要 MS SQL Server,至少出于开发目的。对于从 DB2 中取出一些表的启动脚本,在 SQL Server 中创建然后运行 SqlMetal 并查看源代码。您将看到它为表表示创建了漂亮的氏族类,并且只是在它们上放置了大量但直接的属性 - 这意味着易于复制和粘贴,甚至可以通过良好的脚本生成。一旦您看到一个小的自动生成文件的样子,您还会发现您可以将更多代码附加到提供的挂钩或删除一些现有代码。再次检查LINQ to MySql 等。
LINQ 本身只需要表表示类,因此您可以相当自由地创建自己的 System.Data.Linq.DataContext 派生类,几乎可以满足您的愿望,并且我认为 DB2 中的架构几乎不会更改,因此您不需要更改太频繁了。一般来说,LINQ 是相当开放的系统(正如许多LINQ to some libs 所证明的那样),这意味着如果修改 DataContext 派生还不够,您还可以接管整个 LINQ 表达式。
一旦您有了几个表的概念证明,如果 DB2-s 表创建脚本不能在 SQL Server 上完整运行(有总是有一些语法偏差)并且你确实采取了最简单的路线。
| 归档时间: |
|
| 查看次数: |
5163 次 |
| 最近记录: |