C# ef core 5.0:迁移后的sqlite错误:错误靠近;“最大值”;

C# ef core 5.0:迁移后的sqlite错误:错误靠近;“最大值”;,c#,sqlite,.net-core,entity-framework-core,C#,Sqlite,.net Core,Entity Framework Core,我将我的解决方案和所有子项目更新为net core 5.0,包括ef core。 现在,当我的单元测试使用sqlite生成临时db文件(具有唯一名称)时,我在运行单元测试时遇到了一个问题。请记住,netcore 3.1在本地和VST上都运行良好 当我在新数据库上应用迁移时,会出现以下问题: var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>(); optionsBuilder.

我将我的解决方案和所有子项目更新为net core 5.0,包括ef core。 现在,当我的单元测试使用sqlite生成临时db文件(具有唯一名称)时,我在运行单元测试时遇到了一个问题。请记住,netcore 3.1在本地和VST上都运行良好

当我在新数据库上应用迁移时,会出现以下问题:

 var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
        optionsBuilder.UseSqlite(@"Data Source=test-" + guid + ".db", b => b.MigrationsAssembly("xxx.Repository"));
        using (var dbContext = new ApplicationDbContext(optionsBuilder.Options))
        {
            dbContext.Database.Migrate();
Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteOnQuery(RelationalCommandParameterObject parameterObject) 在Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection连接,iRelationalDictionary
2参数值)在Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable
1 migrationCommands,IRelationalConnection连接) 位于Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(字符串targetMigration) 位于Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade DatabaseFacade)

我不知道它在哪个字段、行或文件上失败了。 db首先是由代码构建的,并且已经进行了十几次迁移。我只能在migration.Designer.cs中找到“max”

b.Property<string>("MyField").HasColumnType("nvarchar(max)");
b.Property(“MyField”).HasColumnType(“nvarchar(max)”);
和ApplicationDbContextSnapshot.cs(每个nvarchar字段上的行完全相同)

对于一些上下文,这个应用程序运行在MsSql服务器上,TUs使用boh InMemory和SqlLite(当需要关系数据库时)

我将包括Sqlite在内的每个Microsoft包都更新到了5.0。 是否有人已经面临这一问题或有解决方案


谢谢。

正如@Shawn所说,一个解决方案是用nvachar([int])替换nvarchar(max)

@ErikEJ:从项目开始几年前,我们就一直在更换供应商,以进行单元测试。到目前为止,由于我们的用例相当简单,两个提供者之间没有类似的突破性变化。sqlite遇到的最麻烦的问题是它无法删除/更改列,这可以通过创建/刷新/删除脚本实现


非常感谢您的帮助。

正如@Shawn所说,一个解决方案是用nvachar([int])替换nvarchar(max)

@ErikEJ:从项目开始几年前,我们就一直在更换供应商,以进行单元测试。到目前为止,由于我们的用例相当简单,两个提供者之间没有类似的突破性变化。sqlite遇到的最麻烦的问题是它无法删除/更改列,这可以通过创建/刷新/删除脚本实现


非常感谢您的帮助。

SQLite是否认可
max
?您可能需要为不同的db提供程序定义不同的数据类型。我认为sqlite的等价物应该是“文本”数据类型。你不能在迁移时切换提供程序,它们是提供程序特定的。是的,这对于sqlite是无效的语法。使用
类型(宽度)
时,宽度必须是数字(并且会立即被忽略)。SQLite是否能够识别
max
?您可能需要为不同的db提供程序定义不同的数据类型。我认为sqlite的等价物应该是“文本”数据类型。你不能在迁移时切换提供程序,它们是提供程序特定的。是的,这对于sqlite是无效的语法。使用
类型(宽度)
时,宽度必须是数字(并且会立即被忽略)。它实际上关心类型的少数情况之一。
b.Property<string>("MyField").HasColumnType("nvarchar(max)");