生成一个简单的只读DAL?

时间:2010-06-09 12:57:04

标签: c# .net orm data-access-layer

我一直在寻找一个简单的解决方案,尽我所能倾向于像NHibernate这样的东西,但到目前为止我发现的所有东西似乎都试图解决一个稍微不同的问题。这是我在当前项目中看到的内容:

我们有一个IBM iSeries数据库作为用于我们核心业务(金融机构)的第三方软件套件的主存储库。我的团队所做的部分工作就是编写应用程序,以某种方式报告或关闭大量此类数据。在过去,我们一直在手动创建ADO .NET连接(顺便说一下,我们使用.NET 3.5和Visual Studio 2008)并手动编写查询等。

继续前进,我想简化从开发团队那里获取数据的过程。我不是每次都创建连接和查询,而是开发人员能够简单地做这样的事情:

var something = (from t in TableName select t);

理想情况下,他们只会获得一些IQueryable或IEnumerable生成的实体。这将在我正在构建的新域核心内完成,这些实体将存在,并且应用程序将通过请求/响应服务层与其进行交互。

需要注意的一些事项是:

  1. 应该生成与数据库表对应的实体一次,我们希望手动保持它们随时间更新。也就是说,如果将列/表添加到数据库中,那么我们就不必做任何事情。 (如果有些被删除,当然,它会破坏,但这没关系。)但是如果我们需要使用一个新列,我们应该能够将它添加到必要的类中,而不必重新生成整件事。
  2. 整个事情应该只有SELECT。我们在这里没有完整的DAL,因为我们不希望能够破坏数据库中的任何内容(甚至意外)。
  3. 我们的域对象和生成的实体类型之间不需要任何映射。该域几乎没有覆盖其中的一小部分数据,其中大部分是我们永远不需要的,我们宁愿只是手动创建可重复使用的地图。我已经有了DAL的逻辑分离,我的“存储库”类返回了域对象,我只是想在存储库类中使用手动ADO的更好的替代方法。
  4. 有什么建议吗?看起来我正在做的就是超出正常的DAL / ORM工具/在线教程的要求,我还没有找到任何东西。或许我只是忽略了一些明显的东西?

2 个答案:

答案 0 :(得分:1)

您可能需要对此进行调查:

http://www.codesmithtools.com/

我参与了一些使用此工具的项目,开发人员对此非常喜欢。

警告:它不是免费软件。

答案 1 :(得分:0)

添加到code4life的答案。

我最近在家里的宠物项目中使用了CodeSmith 2.6 我定制了模板以使用部分CRUD方法生成部分类 然后我扩展了部分类和部分方法以提供基本映射,例如当读取“Order”时,读取相关的“OrderLines”等。

类似的方法可能对您有用,并且更简单,因为实际上,您只需要RUD的CR:)

希望这有帮助。

P.S。我需要从CS 2.6切换到其他东西(可能是MyGeneration),因为2.6依赖于.Net 1.1,这是一个问题,因为我正在转向64开发机器。

<强>更新

我听到你了 有一个好的戳MyGeneration配偶,我们在这里使用CodeSmith工作,这就是为什么我在家里去了2.6(我快速浏览一下MyGeneration,没有立即得到它 - 这比我不得不给它更多的时间它 - 所以切换回CS)。

MyGeneration基本上是CS的开源版本。

另外,为什么不让它生成代码总是 - 你可以通过Partial Classes&amp; amp;部分方法,我知道你认为重新生成是过度的,但是经验告诉我,如果你不这样做,那么你需要它,就好像你拥有它一样需要它你永远不会注意到。