EntityFramework 未正确生成 C# 文件(一些枚举不完整,因此构建失败)

EntityFramework not generating C# files properly (some enums are incomplete, so build fails)

在工作中,我刚刚安装了我的 OS 的全新副本和 VS2015 的全新副本。当我第一次克隆我的解决方案时,我无法再构建它,即使我像往常一样生成了 C# 文件,首先打开 .edmx 文件,然后单击 "save" 图标。

构建时抛出错误:

CS0150: A constant value is expected

因为它生成的枚举不完整!一个例子:

public enum DocumentType : int
{
    Identity = 1,
    ResidenceProof = 2,
    RegisterDoc = ,
}

我当时也遇到了这个编译器错误,但修复后我的 C# 枚举仍然生成错误:

The ADO.NET provider with invariant name 'MySql.Data.MySqlClient' is either not registered in the machine or application config file, or could not be loaded. See the inner exception for details

我到底该如何解决这个问题?

不是真正的答案,但我会 post 我的发现和我选择使用的解决方法;

T4 代码生成模板(使用 .tt 文件扩展名附加到 .edmx 文件的文件)包含使用模型中可用数据生成 C# 的代码,我怀疑第 204 行的代码(可能位于您的版本中的不同行号)以包含一个小错误。

我的活动项目和解决方案资源管理器的屏幕截图:

此行导致错误的枚举:

    this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 3, 1);

这可能会删除由枚举生成器添加的生成代码字符,以便从枚举中删除最后一个 ,,因为这是不必要的。

我通过在此行前面添加输出来测试它的功能,我尝试创建一个将输出 MyEnumMemberName = TEST, 的枚举,并发现输出包含 MyEnumMemberName = TES,

使用这个我发现将行更改为:

    this.GenerationEnvironment.Remove(this.GenerationEnvironment.Length - 2, 1);

解决了我的问题。

目前无法检查这是否也适用于已经生成正确代码的机器,但我希望它对你们中的一些人有所帮助。祝你好运。

我遇到了同样的问题。原来 texttransform.exe 不能很好地理解不同的行尾。我的 .tt 文件是用 Unix EOL 保存的,当我用 Windows EOL 保存它时,它开始正常工作。就这么简单 - 在写字板中打开您的 .tt 文件并保存。