C# &引用;SQLite错误20:&x27;数据类型不匹配''&引用;在.NET 5.0-preview7项目中使用SQLite表重建生成迁移时出错
我有一个简单的类库项目,它有一个EF Core 5.0-rc1DbContext,目标是.NET 5.0-preview7,具有以下实体:C# &引用;SQLite错误20:&x27;数据类型不匹配''&引用;在.NET 5.0-preview7项目中使用SQLite表重建生成迁移时出错,c#,entity-framework,sqlite,entity-framework-core,entity-framework-migrations,C#,Entity Framework,Sqlite,Entity Framework Core,Entity Framework Migrations,我有一个简单的类库项目,它有一个EF Core 5.0-rc1DbContext,目标是.NET 5.0-preview7,具有以下实体: public class User { public Guid Id { get; set; } public String Name { get; set; } public Int32 Age { get; set; } public virtual IList<Post&g
public class User
{
public Guid Id { get; set; }
public String Name { get; set; }
public Int32 Age { get; set; }
public virtual IList<Post> Posts { get; set; }
}
public class Post
{
public Guid Id { get; set; }
public String Text { get; set; }
public DateTime PostDate { get; set; }
public Guid UserId { get; set; }
public virtual User User { get; set; }
}
公共类用户
{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
公共Int32年龄{get;set;}
公共虚拟IList Posts{get;set;}
}
公营职位
{
公共Guid Id{get;set;}
公共字符串文本{get;set;}
public DateTime PostDate{get;set;}
公共Guid用户标识{get;set;}
公共虚拟用户用户{get;set;}
}
然后我通过dotnet ef migrations add InitialCreate
命令添加了第一次迁移,创建了测试数据库并填充了一些数据。
在此之后,我将Post.Id的数据类型从Guid更改为Int32,并创建了第二次迁移
根据SQLite migrations表重建现在可用,因为EF Core 5.0.0-preview8。
另外,根据的规定,AlterColumn命令应该通过表重建对SQLite起作用
但是运行context.Database.Migrate()代码>引发异常
SQLite错误20:“数据类型不匹配。”
复制步骤:
下载(带有一些数据的测试数据库test.db
已放置在程序输出文件夹中)
编译并运行测试控制台应用程序-context.Database.Migrate()代码>抛出一个
例外情况
异常堆栈跟踪:
位于Microsoft.Data.Sqlite.SqliteException.throweexceptionforrc(Int32
rc,sqlite3 db)在
Microsoft.Data.Sqlite.SqliteDataReader.NextResult()位于
Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior
行为)在Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader()上
位于Microsoft.Data.Sqlite.SqliteCommand.ExecuteOnQuery()处
Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteOnQuery(RelationalCommandParameterObject
参数对象)在
Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteOnQuery(IRelationalConnection
连接,IREADONLYDICTIONAL'2参数值)位于
Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecutionQuery(IEnumerable`1
migrationCommands,IRelationalConnection)位于
Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(字符串
目标(迁移)在
Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade)
中Test.Program.Main(字符串[]args)处的databaseFacade)
D:\Test\Test\Program.cs:第14行
进一步的技术细节
EF核心版本:5.0-rc1
数据库提供程序:Microsoft.EntityFrameworkCore.Sqlite 5.0-rc1
目标框架:.NET 5.0-preview7
操作系统:Windows 10 2004 x64
IDE:Visual Studio 2019 16.7.3专业版
看起来SQLite teble rebuild不是一个灵丹妙药,它的工作方式与我预期的略有不同。如果更改列的数据类型,则应手动写入所有迁移-