代码优先迁移在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"));
我真的有点迷路了。
我找到了解决方案,真的很尴尬。
在添加了字符串属性的modelbuilder代码后,我忘记了重新创建最初的迁移。
我现在刚刚重新制作了它,它很管用。