SqlMetal是否是映射到包含* only * tables的数据库的好解决方案?

时间:2009-12-24 01:05:37

标签: linq linq-to-sql orm sqlmetal

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

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

有些问题:

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

2 个答案:

答案 0 :(得分:2)

标题问题的答案是肯定的,对于只有表的数据库来说它是一个很好的解决方案(当数据库增长到包括其他数据库结构(如视图和存储过程)时,这个点就会增长。)

  1. 很浅。您将发现的主要区别是,某些适用于Linq2Object的方法不适用于Linq2SQL。将对象和Linq2SQL混合在一起时必须要小心。当你得到一个例外情况说“我们支持的唯一东西就是包含”时,你会知道你发现这个。
  2. 相当
    • 您可能会发现在某些情况下Linq2SQL不会生成最有效的SQL。
    • 有时事情会因交易而变得棘手。
    • 没有更新声明。每次要更新一组记录时都必须选择它们,然后更新每个记录,然后SubmitChanges()
    • 除非您只是选择,否则您需要在桌面上使用主键。没有主键,您无法删除或更新。
    • Linq2SQL不直接支持多对多关系。
  3. 一个简单的解决方案是设置一个prebuild任务,每次构建时都会生成Linq2SQL DataContexts。
  4. 关于将Linq2SQL用于所有内容的目标,请为一些讨厌的LINQ查询做准备(以及讨厌的调试周期)。连接语法是冗长的,根据查询的复杂性,很快就会比SQL等价物更难维护。分组并不像GROUP BY那么容易。

答案 1 :(得分:0)

如果您对LINQ非常认真,请选择一份Linq in Action。它在易于理解的章节中介绍了Linq和SqlMetal的所有方面。

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