代码优先迁移在SQL Server CE中生成NTEXT而不是nvarchar

本文关键字:NTEXT nvarchar CE 迁移 Server SQL 代码 | 更新日期: 2023-09-27 18:30:05

我已经开始在项目中引入代码优先迁移,但我偶然发现了几个无法解决的问题。

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

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

  • enable-migrations(使用localhost SQL Server数据库,在其中创建迁移)
  • 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"));

我真的有点迷路了。

代码优先迁移在SQL Server CE中生成NTEXT而不是nvarchar

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

在添加了字符串属性的modelbuilder代码后,我忘记了重新创建最初的迁移。

我现在刚刚重新制作了它,它很管用。