代码首先在西里尔语中播种数据

时间:2016-01-05 22:38:20

标签: c# .net entity-framework code-first

我正在使用种子方法来填充数据库。 一些对象具有西里尔字母的属性。例如:

context.Wines.AddOrUpdate(new Wine()
       {
           Id = 1,
           Name = "Шардоне",
           etc........................................

在数据库中正确创建对象,但是当我在MS SQL管理工作室中检查数据库而不是葡萄酒的名称为“Шардоне”时,它显示为“Øàðäîíå”。

奇怪的是,当我在Startup类中创建葡萄酒时,这样:

var db = new WineSystemDbContext();
var ShardoneWine = new Wine { Name = "Шардоне};
db.Wines.Add(ShardoneWine);

数据库中的所有内容都以西里尔文正确显示。

你知道可能导致这种情况的原因吗?

5 个答案:

答案 0 :(得分:5)

您可以在connection string中指定connectin的字符集。只需将此部分添加到您的连接中:

charset=UTF8;

如果没有结果,您可以尝试更改Configuration.cs文件的char-set。有两种方法可以做到这一点。

  1. 在Visual Studio编辑器中关闭Configuration.cs,然后在解决方案资源管理器中右键单击该文件,然后选择“打开方式...” - > “带编码的CSharp编辑器”并从列表中选择“Unicode(带签名的UTF-8) - 代码页65001”选项(如果此代码页将显示一些“中文”符号,请尝试其他代码页)。现在修复你的cyrilic章节并保存Configuration.cs文件。
  2. 选择“文件” - > “高级保存选项”并使用使用UTF-8编码对数据进行种子设定的方法保存文件。
  3. 如果您使用ntext列类型,也可能会遇到问题。

答案 1 :(得分:0)

为了存储,例如西里尔字母字符,必须为nvarchar(x) 至少从我的经验来看。

我已经看到了相同的现象:varchar(100)数据很好但是???出来了 - 但是nvarchar(100)一切似乎没问题。

答案 2 :(得分:0)

在您的查询中需要添加de N (告诉SQL Server它是unicode),例如:

SELECT * FROM Wines WHERE someColumn = N'sometext'

答案 3 :(得分:0)

我找到了解决方案!

这是我做的(在另一个主题中找到)

在解决方案资源管理器中打开您的Configuration.cs文件,复制Seed方法并在Windows记事本中粘贴代码(暂时)。

“接下来关闭Visual Studio中的Configuration.cs(如果已打开),然后在解决方案资源管理器中右键单击该文件并选择”打开方式...“ - >”带编码的CSharp编辑器“并从列表中选择选择“Unicode(带签名的UTF-8) - 代码页65001”选项(当这个选项显示一些“中文”字符时,尝试不同的选项)。

将Seed方法替换为记事本中的方法。保存,删除数据库和Update-Databse中的现有数据。您的国家/地区字符现在可以正确显示。

干杯“。

感谢大家的帮助

答案 4 :(得分:0)

我得到了以下方面的帮助: 选择“文件” - > “高级保存选项”并使用使用UNICODE(带签名的UTF-8)编码和行结尾 - 当前设置对数据进行种子设定的方法保存文件。