Code First Migrations在SQL Server CE中生成NTEXT而不是nvarchar

时间:2014-11-11 16:38:05

标签: c# sql-server-ce entity-framework-6 ef-migrations

我已经开始在项目中引入代码首次迁移,但是我偶然发现了一些我无法解决的问题。

设置是,项目有两个目标:在线客户端,它连接到WCF服务并使用常规SQL Server数据库。还包括一个脱机客户端,它在本地保存所有数据并使用SQL Server CE数据库。

这已经有效了。现在我需要介绍一种迁移两个数据库版本的方法。当然我更喜欢使用相同的迁移代码。到目前为止我所做的是:

  • enable-migrations(使用localhost SQL Server db,我在其中创建迁移)
  • add-migration(初次迁移)

一个问题是,当我使用CreateIfNotExists初始化程序创建SQL Server CE数据库时,将创建数据库,并将所有字符串属性映射到nvarchar列。

但是,当我开始使用迁移并使用MigrateToLatestVersion初始化程序创建我的数据库时,将创建数据库,但字符串属性现在已映射到NTEXT列。

后续种子失败,因为我得到以下异常:

  

ntext和image数据类型不能在WHERE,HAVING,GROUP BY,ON或IN子句中使用,除非这些数据类型与LIKE或IS NULL谓词一起使用。

我试图强制模型构建器使用nvarchar作为字符串,但无济于事。它完全被忽略了。

modelBuilder.Properties<string>().Configure(config => config.HasColumnType("nvarchar"));

我真的迷失了。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,真的很尴尬。

在我为字符串属性添加了我的模型构建器代码之后,我忘了重新创建我的初始迁移。

我现在只是重新创建它并且有效。