【发布时间】:2009-01-27 19:27:21
【问题描述】:
我想要一个强类型数据集以及设计器 TableAdapters,但 Visual Studio 的数据集设计器会生成特定于提供程序(例如 SQL Server 与 MySql)的代码,我不想只使用一个提供程序。 ORM 会有所帮助,但是:
- Entity Framework 仅适用于 3.5,不能很好地与 DataSet 配合使用,并且
- NHibernate 不支持 SQLite。
这是我想出的:
“DataSets.Masters”包含一个完全设计的数据集,绑定到某个特定的提供者(例如 SqlClient),包括:
- 一个 CustomTableAdapter 组件,由每个设计者子类化TableAdapter,
- 一个 ITableAdapterManager 接口,由设计者的 TableAdapterManager 实现,用于分层更新。
除了 DataSets.MyDataSetTableAdapters 命名空间的所有内容都被复制到“DataSets”项目中,其中删除了所有 TableAdapter 代码(连同 xs:annotation)。 p>
DataSets.MyDataSetTableAdapters 命名空间,连同 MyDataSet.xsd 等,被复制并定制到每个“DataSets.SqlClient”、“DataSets.SQLite”等中,每个都引用“数据集”程序集。
现在我只需要根据任何给定的连接字符串选择正确的程序集来加载我的 ITableAdapterManager 实现。当表架构发生变化时,我会修改 Masters 程序集,将代码复制到生产程序集,并运行一些测试。
所以我的问题是:我让这件事变得太难了吗? DataSet 这么标准,需要通过数据访问层支持多个数据库引擎的需求如此普遍,有没有不涉及复制、粘贴和查找替换的方法? 你是做什么的?
【问题讨论】:
标签: c# database strongly-typed-dataset