Entity framework 4 Ado.NET模拟生成器之后不存在DateTime

Entity framework 4 Ado.NET模拟生成器之后不存在DateTime,entity-framework-4,ado.net,mocking,Entity Framework 4,Ado.net,Mocking,我使用ADO.NET模拟上下文生成器从EDMX文件生成实体类,以便在单元测试中使用它们。但是,在生成实体并尝试构建项目后,出现以下错误: The type name 'DateTime' does not exist in the type 'MyProject.Models.System' 在代码中,DateTime属性以以下格式声明: public virtual System.DateTime LastActive 如果我将System.DateTime更改为just DateTime

我使用ADO.NET模拟上下文生成器从EDMX文件生成实体类,以便在单元测试中使用它们。但是,在生成实体并尝试构建项目后,出现以下错误:

The type name 'DateTime' does not exist in the type 'MyProject.Models.System'
在代码中,DateTime属性以以下格式声明:

public virtual System.DateTime LastActive
如果我将System.DateTime更改为just DateTime,错误将清除。不幸的是,这是不实际的,因为有相当多的他们,而且他们将被覆盖,下次我重新生成


为什么我会收到此错误,以及如何防止它?

问题似乎在于您有一个名为System的类型。这真是个糟糕的主意,它会把这个问题弄得到处都是。有关更多详细信息,请参阅

最具体的声明方式是:

public virtual global::System.DateTime LastActive { get; set; }

如果你可以改变发电机来创建它,它应该是好的。。。但就我个人而言,如果可能的话,我会将系统类型改为其他名称。

最近也遇到了同样的问题,Jon Skeets的回答帮助我发现了这个问题,但是有一个比在*.tt文件中编辑更简单的解决方案,如果您转到设计器,您可以调用实体/类/模型,而不是系统,同时仍然有一个名为system的表

对我来说,更改表名不是一个选项,因为我没有提供数据库,我只是对它进行编码

在设计器中打开.edmx文件

查找名为system的表

单击鼠标右键并选择“属性”,或者单击它并查看右下角

在“常规”类别下找到属性名称,并将其命名为与表不同的名称

在.edmx文件上单击鼠标右键,然后选择“运行自定义工具”

对我来说,这解决了13000多个错误


如果有人知道如何在不使用设计器的情况下更改实体的名称,请将其写入注释中。

ah-你说得对。我有一个名为System的数据库表,这个脚本正在为它生成一个类。如何修改代码生成项?@GavinCoates:我希望在实体设计器中可以选择生成的类型名称。谢谢Jon-我不知道为什么我没有想到这一点。