C# 哪个ORM会给我编译测试过的查询?
哪个ORM会给我编译测试过的查询 linqtosql是否经过编译时测试C# 哪个ORM会给我编译测试过的查询?,c#,.net,orm,C#,.net,Orm,哪个ORM会给我编译测试过的查询 linqtosql是否经过编译时测试 编辑: 假设我编写了一个引用名为“TotalSales”的列的查询。然后,我将数据库中的列重命名为TotalSales2(以及nHibernate中的任何其他配置文件,如:Employee.cfg.xml)。 当我编译项目时,我希望Visual Studio告诉我“totalSales”列不存在,然后我会去更改它。据我所知,没有。例如,它们通常允许您创建无法转换为SQL的LINQ查询。此外,我不知道有任何编译时检查映射是否
编辑:
假设我编写了一个引用名为“TotalSales”的列的查询。然后,我将数据库中的列重命名为
TotalSales2
(以及nHibernate中的任何其他配置文件,如:Employee.cfg.xml)。当我编译项目时,我希望Visual Studio告诉我“totalSales”列不存在,然后我会去更改它。据我所知,没有。例如,它们通常允许您创建无法转换为SQL的LINQ查询。此外,我不知道有任何编译时检查映射是否正确映射到数据库
在我看来,您可以并且应该在测试中执行所有这些检查。大多数ORM都很容易做到这一点。我使用它,但当数据模型发生更改时,它必须“刷新”。我不认为你会得到一个ORM,它会在编译时检查对数据库的修改。您在这方面的要求很高。如果将代码生成步骤作为预构建事件包含在内,亚音速可以做到这一点 在DataObjects.Net中,由[Field]属性标记的属性始终绑定到数据库中的字段,所以您可以确保查询将被转换。若您使用not persistent字段或另一条not SUPPORED语句,则查询转换器将在运行时失败,或对获取的对象(在客户端)执行此类操作
通常编译时验证是不可能的,或者理论上可以通过特殊的编译后任务来执行,这些任务将扫描编译后的代码,找到所有查询并验证它们。但这样的检查会严重减慢编译过程。我使用了一个名为DODS的Java工具,它是在2000年用Enhydra应用服务器开发的。多德还在附近: DODS的工作方式是,它是一种代码生成工具,符合编译时验证的目标。它生成与数据库中的表相对应的Java类。这些类的对象实例对于表中的每一列都有getter和setter。当然,如果更改数据库结构,就必须使用DODS重新生成Java代码 只要将生成的代码与数据库的结构保持最新,它就会提供编译时验证,证明使用这些类的任何应用程序代码都在查询有效的表和列
无论如何,我知道你用C#和ASP.NET标记了你的问题。生成Java代码的工具不会对您有多大帮助。但是,可能还有另一种更专门用于.NET的工具,其工作原理与生成映射到数据库结构的代码相同。因此,我建议将您的范围缩小到.NET ORM工具,这些工具说明了代码生成。可能不完全是您想要的,但是如果使用实体框架,并从设计器中选择“从数据库更新模型”,您将收到消息,说明如果更改名称,字段将不再映射
这不会在您构建项目时自动发生。基本上,您需要两个功能:
- 编译时检查查询(=具有LINQ实现的ORM)。这通常不是问题-至少有些工具支持这一点
- 预构建步骤基于数据库架构更新实体。AFAIK很少以这种方式实现-通常必须通过模式显式更新模型。请注意,这一部分通常相当昂贵