1

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

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

在代码中,日期时间属性以以下格式声明:

public virtual System.DateTime LastActive

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

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

4

2 回答 2

0

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

最具体的声明方式是:

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

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

于 2012-05-30T11:11:19.433 回答
0

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

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

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

  2. 找到名为 system 的表

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

  4. 在“一般”类别下找到属性“名称”并将其命名为不同于表的名称。

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

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

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

于 2014-09-22T07:44:45.443 回答