日期时间在模拟生成器之后不存在 Ado.NET



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

The type name 'DateTime' does not exist in the type 'MyProject.Models.System'

在代码中,DateTime 属性声明的格式为:

public virtual System.DateTime LastActive

如果我将系统日期时间更改为仅日期时间,则错误将清除。不幸的是,这是不切实际的,因为它们中有很多,除了下次我再生时它们会被覆盖。

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

看起来问题是你有一个名为 System 的类型。这是一个非常糟糕的主意 - 它会导致这个问题无处不在。(有关更多详细信息,请参阅Eric Lippert关于此主题的博客文章...

声明这一点的最具体方式是:

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

如果您可以更改生成器来创建它,那应该没问题......但就个人而言,如果可以的话,我会将System类型更改为其他名称。

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

对我来说,更改表名不是一种选择,因为我没有提供数据库,我只是在编码它。

  1. 在设计器中打开 .edmx 文件

  2. 查找名为"系统"的表

  3. 右键单击并选择属性,或单击它并查看右下角

  4. 在"常规"类别下,找到属性"名称"并将其称为与表不同的名称。

  5. 右键单击.edmx文件,然后选择"运行自定义工具"

对我来说,这解决了13 000 +错误

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

相关内容

最新更新