Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 哪个ORM会给我编译测试过的查询?_C#_.net_Orm - Fatal编程技术网

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

C# 哪个ORM会给我编译测试过的查询?,c#,.net,orm,C#,.net,Orm,哪个ORM会给我编译测试过的查询 linqtosql是否经过编译时测试 编辑: 假设我编写了一个引用名为“TotalSales”的列的查询。然后,我将数据库中的列重命名为TotalSales2(以及nHibernate中的任何其他配置文件,如:Employee.cfg.xml)。 当我编译项目时,我希望Visual Studio告诉我“totalSales”列不存在,然后我会去更改它。据我所知,没有。例如,它们通常允许您创建无法转换为SQL的LINQ查询。此外,我不知道有任何编译时检查映射是否

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

linqtosql是否经过编译时测试


编辑:
假设我编写了一个引用名为“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很少以这种方式实现-通常必须通过模式显式更新模型。请注意,这一部分通常相当昂贵

编译时测试是什么意思?你能详细说明一下吗?我假设他是说在编译时进行检查,以确保查询将运行,并且映射映射到存在的表和列。”以及nHibernate中的任何其他配置文件,如say Employee.cfg.xml,“你不在这里更改映射吗?如果是这样,任何orm都可以随心所欲+1我同意代码生成是最简单的解决方案,即使更改数据库时必须重新生成代码。根据域模型升级数据库结构的工具也非常有效。单元测试可以完成这项工作,但仅用于运行时检查