Code First 问题,使用西里尔文播种数据

Code First issue with seeding data in Cyrillic

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

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

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

奇怪的是,当我在 Startup class 中创建 wine 时是这样的:

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

数据库中的一切都以西里尔字母正确显示。

您知道这可能是什么原因造成的吗?

为了存储例如西里尔个字符,必须是nvarchar(x) 至少根据我的经验。

我看到了同样的现象:varchar(100) 数据正常,但输出 ???- 但 nvarchar(100) 一切似乎都很好。

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

charset=UTF8;

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

  1. 在 Visual Studio 编辑器中关闭 Configuration.cs,然后在解决方案资源管理器中关闭该文件 right-click,然后 select "Open With..." -> "CSharp Editor with Encoding" 和从列表中选择 "Unicode (UTF-8 with signature) - Codepage 65001" 选项(如果此代码页会显示一些 'Chinese' 符号,请尝试其他代码页)。现在修复您的西里尔文章节并保存 Configuration.cs 文件。
  2. Select "File" -> "Advanced Save Options" 并使用UTF-8编码播种数据的方法保存文件。

如果您使用 ntext 列类型,您也可能会遇到问题。

在您的查询中需要添加 de N (告诉 SQL 服务器它是 unicode),示例:

SELECT * FROM Wines WHERE someColumn = N'sometext'

我找到了解决办法!

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

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

"Next close Configuration.cs in Visual Studio if you have it opened, then right-click on that file in Solution Explorer and select "打开方式..." -> "CSharp Editor with Encoding" 并从列表中选择 "Unicode (UTF-8 with signature) - Codepage 65001" 选项(尝试不同的选项,当这个选项会显示一些 'chinese'个字符)。

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

干杯。

感谢大家的帮助

我得到以下帮助: Select "File" -> "Advanced Save Options" 并使用使用 UNICODE(带签名的 UTF-8)编码和行尾 - 当前设置播种数据的方法保存文件。