Ado.NET模拟生成器后不存在DateTime

时间:2012-05-30 11:06:11

标签: entity-framework-4 ado.net mocking

我正在使用ADO.NET Mocking Context Generator从EDMX文件生成我的实体类,以便我可以在单元测试中使用它们。但是,在生成我的实体并尝试构建项目之后,我收到以下错误:

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

在代码中,DateTime属性以以下格式声明:

public virtual System.DateTime LastActive

如果我将System.DateTime更改为DateTime,则会清除错误。不幸的是,这是不切实际的,因为它们中有很多,除了它们将在下次重新生成时被覆盖。

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

2 个答案:

答案 0 :(得分:0)

看起来问题是你有一个名为System的类型。这是一个非常糟糕的主意 - 它会在整个地方引发这个问题。 (有关详细信息,请参阅Eric Lippert's blog posts on this topic)。

宣布这一点的最具体方式是:

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

如果您可以更改生成器来创建它,它应该没问题......但是如果可能的话,我个人只是将System类型更改为其他类型。

答案 1 :(得分:0)

最近遇到了同样的问题并偶然发现了这个问题,Jon Skeets的回答帮助我确定了问题,但是有一个比编辑* .tt文件简单得多的解决方案,如果你去设计师就可以调用你的实体/ class / model除了系统之外还有一个名为system的表。

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

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

  2. 找到名为system

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

  5. 在“general”类别下找到属性“name”并将其称为与table不同的内容。

  6. 右键单击.edmx文件并选择“运行自定义工具”

  7. 对我而言,这解决了13 000多个错误

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