Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;SQLite错误20:&x27;数据类型不匹配''&引用;在.NET 5.0-preview7项目中使用SQLite表重建生成迁移时出错_C#_Entity Framework_Sqlite_Entity Framework Core_Entity Framework Migrations - Fatal编程技术网

C# &引用;SQLite错误20:&x27;数据类型不匹配''&引用;在.NET 5.0-preview7项目中使用SQLite表重建生成迁移时出错

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

我有一个简单的类库项目,它有一个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> 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不是一个灵丹妙药,它的工作方式与我预期的略有不同。如果更改列的数据类型,则应手动写入所有迁移-