0

我正在考虑使用 SqlMetal 为一个简单的小型数据库自动生成 LinqToSql 代码。数据库将只有带有一些主键和外键的表(即,没有视图、存储过程、函数等)。我想使用 Linq 进行所有连接、分组、排序和高级数据操作。

我有使用 LinqToObjects 和 LinqToXml 的经验,但我从未使用过合适的 ORM 或 LinqToSql。

一些问题:

  1. 鉴于我之前的经验,SqlMetal/LinqToSql 的学习曲线有多陡峭?
  2. SqlMetal 对于简单的数据库是否可靠?
  3. 如果有的话,我会遇到什么样的惊喜?
  4. 我将如何自动化我的项目,以便每次构建时重新生成 LinqToSql 代码,或者更好的是,重建我的项目?(我将使用 Visual Studio 2008。)
  5. 你能推荐一个很好的教程来让我快速掌握使用 SqlMetal 和 LinqToSql 的速度吗?
4

2 回答 2

2

您的标题问题的答案是肯定的,它对于仅包含表的数据库来说是一个很好的解决方案(并且当您的数据库增长到包含其他数据库结构(如视图和存储过程)时,可以增长到一定程度)。

  1. 很浅。您会发现的主要区别是某些适用于 Linq2Objects 的方法不适用于 Linq2SQL。将对象和 Linq2SQL 混合在一起时必须小心。当您遇到一个异常说“我们唯一支持的是包含”的内容时,您就会知道您遇到了这个问题。
  2. 相当。
    • 您可能会发现在某些情况下,Linq2SQL 不会生成最有效的 SQL。
    • 有时,交易可能会变得棘手。
    • 没有更新声明。每次您想要更新一组记录时,您必须选择它们,更新每个记录,然后SubmitChanges().
    • 除非您只进行选择,否则您的表上需要有一个主键。如果没有主键,您将无法删除或更新。
    • Linq2SQL 不直接支持多对多关系。
  3. 一个简单的解决方案是设置一个预构建任务,每次构建时都会生成您的 Linq2SQL 数据上下文。

至于您对所有事情都使用 Linq2SQL 的目标,请为一些讨厌的 LINQ 查询(和讨厌的调试周期)做好准备。连接语法很冗长,并且根据查询的复杂性,可能很快变得比 SQL 等价物更难维护。分组并不像GROUP BY.

于 2009-12-24T01:10:26.577 回答
0

如果您对 LINQ 很认真,请阅读 Linq in Action 的副本。它在易于理解的章节中涵盖了 Linq 和 SqlMetal 的所有方面。

另外,如果你有兴趣,你可以使用SubSonic 3,它使用 TT4 模板来生成你的模型,这在 VS2008 中是非常自动化的。然后,您可以使用普通的 Linq 查询来访问数据。这可能是最简单的方法。

于 2009-12-24T01:17:11.477 回答