哪个ORM会给我编译测试查询?

时间:2009-05-28 17:02:42

标签: c# .net orm

哪个ORM会给我编译测试的查询?

linqtosql编译时间是否经过测试?


编辑:

假设我编写了一个引用名为“TotalSales”的列的查询。然后,我将数据库中的列重命名为TotalSales2(以及任何其他配置文件,如:nHibernate中的Employee.cfg.xml)。
当我编译项目时,我希望Visual Studio告诉我'totalSales'列不存在然后我会去更改它。

7 个答案:

答案 0 :(得分:5)

据我所知,没有任何东西。它们通常会让您创建一个无法转换为SQL的LINQ查询。此外,我不知道任何编译时检查您的映射是否正确映射到您的数据库。

在我看来,您可以在测试中执行所有这些检查。大多数ORM使这很容易做到。

答案 1 :(得分:2)

我使用LLBLGen但是在进行数据模型更改时必须“刷新”。我不认为你会得到一个在COMP COMP TIME时检查修改数据库的ORM。你在那里要求很多。

答案 2 :(得分:1)

在DataObjects.Net中,[Field]属性标记的属性始终绑定到数据库中的字段,因此您可以确保将转换查询。如果您不使用持久字段或其他不支持的语句,则查询转换程序将在运行时失败或对已获取的对象(在客户端上)执行此类操作。

通常编译时验证是不可能的,或理论上可以使用特殊的构建后任务执行,这将扫描已编译的代码,查找所有查询并验证它们。但是这样的检查会严重减慢编译过程。

答案 3 :(得分:1)

或许不完全是您正在寻找的内容,但如果使用实体框架并从设计器中选择“从数据库更新模型”,您将收到消息,说明如果您更改字段不再映射名字。

构建项目时不会自动发生这种情况。

答案 4 :(得分:1)

基本上,您需要共同使用2个功能:

  • 编译时检查的查询(=带有LINQ实现的ORM)。这通常不是问题 - 至少有一些工具支持这一点。
  • 预构建步骤根据数据库架构更新实体。 AFAIK很少以这种方式实现 - 通常您必须通过模式显式更新模型。请注意,这部分通常相当昂贵。

答案 5 :(得分:0)

如果您将代码生成步骤包含为预构建事件,则SubSonic可以执行此操作。

答案 6 :(得分:0)

我使用了一个名为DODS的Java工具,该工具是由ca.开发的。 2000年与Enhydra应用程序服务器。 DODS还在这里:http://www.enhydra.org/tech/dods/

DODS的工作方式,以及符合编译时验证目标的方式,是它是一个代码生成工具。它生成与数据库中的表对应的Java类。这些类的对象实例具有表中每列的getter和setter。当然,如果更改数据库结构,则必须使用DODS重新生成Java代码。

只要您使用数据库结构保持生成的代码是最新的,它就会提供编译时验证,即使用这些类的任何应用程序代码都在查询有效的表和列。

无论如何,我意识到你用C#和ASP.NET标记了你的问题。生成Java代码的工具对您没有帮助。但是可能还有另一种更专门用于.NET的工具,其工作原理与生成映射到数据库结构的代码的原理相同。所以我建议缩小你的search到.NET ORM工具,这些工具可以说明代码生成。