2012-03-28 38 views
1

我使用EF代碼第一次與遷移的項目,我已經在一個奇怪的行爲無意中發現:實體框架「Enable-Migrations」命令生成ANSI編碼的Configurations.cs文件。爲什麼?

執行「啓用的遷移」指令在Package Manager控制檯中生成一個「遷移」文件夾和「配置。 cs「文件。當我在Notepad ++中檢查「Configurations.cs」的編碼時,它顯示它是ANSI編碼的。

當我在Visual Studio 2010中創建一個任意文件時,它總是以UTF-8編碼。爲什麼NuGet以另一種編碼生成文件?

由於提前, 克里斯

+0

可能是因爲powershell在ANSI中創建了東西,VS創建了UTF-8中的東西,但是不要在那個引用我 – jcolebrand 2012-03-28 23:20:33

回答

2

我終於可以正確地調查這...

的文件(Configuration.cs和個體遷移文件)實際上被保存爲UTF-8沒有文件signiture。除非非ANSI字符出現在文件的某處,否則此格式與ANSI無法區分。如果文件中存在非ANSI字符,Notepad ++等工具將只顯示爲UTF-8。這是因爲只有ANSI字符的UTF-8文件與ANSI格式100%兼容。

如果在上下文類型名稱,表名稱等中有非ANSI字符,則事情將按預期工作,並且Notepad ++會將文件格式報告爲UTF-8。

+0

感謝您的claryfying!我沒有想到ANSI是UTF-8的一個子集,並且盲目地信任Notepad ++ :-) – Christopher 2012-04-18 11:18:21

1

配置文件實際上被存儲爲嵌入在裝配在NuGet包模板,然後被處理並複製到你的項目用於啓用的遷移時。存儲的模板是ANSI文件,因此您得到的文件是ANSI文件。您應該可以將其重新保存爲UTF-8 - 運行時不會在意。

+0

感謝您的答案!模板是ANSI編碼的有什麼特定的原因嗎?這是不是說默認情況下,任何有瘋狂字符的種子都不會被正確存儲在數據庫中? – Christopher 2012-03-29 07:12:51

+0

我不認爲除了我們所有的源文件都是ANSI之外,還有什麼特別的原因,所以最終也是這樣。我會跟進其他人,看看默認情況下使其成爲UTF-8是否有意義。 – 2012-03-29 16:15:49

+0

「默認情況下任何有瘋狂字符的種子都不會正確存儲在數據庫中」,哦,這正是我們項目中發生的情況,我們花了一些時間來弄清爲什麼我們的DB值錯誤,儘管nvarchar和collat​​ion設置正確。這是因爲ANSI編碼的遷移文件在服務器上運行時使用了針對非Unicode程序的不同默認ANSI代碼頁。 – JustAMartin 2016-08-08 10:32:22