实体框架“Enable-Migrations”命令生成以ANSI编码的Configurations.cs文件。为什么?

时间:2012-03-28 08:14:03

标签: c# entity-framework entity-framework-4 nuget

我正在使用EF Code First进行项目迁移,我偶然发现了一个奇怪的行为:

在程序包管理器控制台中执行“启用 - 迁移”命令会生成“迁移”文件夹和“Configurations.cs”文件。当我在Notepad ++中检查“Configurations.cs”的编码时,它表明它是ANSI编码的。

当我在Visual Studio 2010中创建任意文件时,它始终以UTF-8编码。为什么NuGet以其他编码生成文件?

提前致谢, 克里斯

2 个答案:

答案 0 :(得分:2)

我终于开始正确地调查这个......

文件(Configuration.cs和各个迁移文件)实际上保存为UTF-8而没有文件签名。除非非ANSI字符出现在文件中的某处,否则此格式与ANSI无法区分。如果文件中存在非ANSI字符,Notepad ++等工具只会将其显示为UTF-8。这是因为只有ANSI字符的UTF-8文件与ANSI格式100%兼容。

如果你的上下文类型名称,表名等中有非ANSI字符,那么事情就会按预期工作,而Notepad ++会将文件格式报告为UTF-8。

答案 1 :(得分:1)

配置文件实际上存储为嵌入在NuGet包中的程序集中的模板,然后在使用Enable-Migrations时处理并复制到项目中。存储的模板是ANSI文件,因此您获得的文件是ANSI文件。您应该能够将其重新保存为UTF-8 - 运行时无关紧要。