C# 实体框架代码优先迁移和Firebird
我正在尝试在Firebird 2.5数据库上启用迁移 我使用的是VS2015,ADO驱动程序和实体提供程序已安装并正常工作 我对数据库进行了反向工程,进行了必要的更改以使其正常工作 我可以在PackageManager控制台上执行启用迁移,并添加迁移 当我更新数据库时,会发生以下情况:C# 实体框架代码优先迁移和Firebird,c#,entity-framework,ef-code-first,firebird,C#,Entity Framework,Ef Code First,Firebird,我正在尝试在Firebird 2.5数据库上启用迁移 我使用的是VS2015,ADO驱动程序和实体提供程序已安装并正常工作 我对数据库进行了反向工程,进行了必要的更改以使其正常工作 我可以在PackageManager控制台上执行启用迁移,并添加迁移 当我更新数据库时,会发生以下情况: PM> update-database Specify the '-Verbose' flag to view the SQL statements being applied to the target
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201705301505265_Initial].
Applying explicit migration: 201705301505265_Initial.
ScriptHalted
如果我更新数据库-详细,我会得到以下结果:
PM> update-database -Verbose
Using StartUp project 'Visao.Web'.
Using NuGet project 'Visao.Data'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'D:\Upwork\Fernando\SIGECOM.FDB' (DataSource: localhost, Provider: FirebirdSql.Data.FirebirdClient, Origin: Configuration).
Applying explicit migrations: [201705301505265_Initial].
Applying explicit migration: 201705301505265_Initial.
INSERT INTO "__MigrationHistory"("MigrationId", "ContextKey", "Model", "ProductVersion")
VALUES (CAST(_UTF8'201705301505265_Initial' AS VARCHAR(150)), CAST(_UTF8'Visao.Data.Migrations.Configuration' AS VARCHAR(300)), x'1F8B0800000000000400ECBDDD92DC3
还有很多字符,因为它试图向数据库中添加一个blob
已将_MigrationHistory数据库添加到FDB文件:
所以我想这是可行的
我不知道下一步该怎么办,有人吗
编辑
由于似乎所有内容都已创建,因此我认为错误可能来自迁移表上的Insert。
也许是虫子
编辑2
我使用Update Database-Script尝试在IBExplorer上运行,但出现以下错误:
can't format message 13:896 -- message file C:\WINDOWS\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command - line 1, column 226.
即使只运行Insert语句也不起作用
编辑3
在他们的追踪器中创建一个链接,看看是否有其他人知道
编辑4
似乎负责Bug跟踪页面的人一直在删除Bug
无论如何,如果我更改了提供程序,无论是MSSQL还是MySQL,迁移都会起作用
编辑5
这是创建的第一个迁移。它是空的,因为我试图使用一个已经填充的现有数据库,现在我想先使用代码
public partial class Initial : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
正如马克·罗特维尔所说(这个答案他应该得到分数)。你在Firebird中达到了语句大小的限制。我对此无能为力,因为这需要脚本(即使直接执行),所以参数无法工作
可能的解决方法是创建多个较小的模型并将其用于迁移。或者始终将脚本生成到文件中并手动使用参数。Sooo您的问题是,现在一切都完成了,您应该对数据库执行哪些操作?@RandRandom否,我的问题是如何使迁移工作正常,它们没有正确提交。不确定是否支持迁移。请参阅“命令的意外结束-第1行,第226列”-让我认为十六进制文字-x '012345 67 8..…DEF太长,在中间被剪切,代码的结尾部分是“2C0B00”,CAST(“UTF8”'1.1.3-40302’作为VARCHAR(32))只是在SQL核中不存在。在最大脚本长度、最大语句长度或最大VARCHAR长度限制()上存在实现限制,而且您似乎刚刚达到了一个限制。这句话的结尾似乎被打断了。因此-不要使用文本,使用参数:-d我唯一能确定的是二进制字符串超过了实现限制(该字符串为106112个字符,Firebird 2.5对字符串文本的限制为32K,对整个查询字符串的限制为64K(Firebird 3允许10MB查询字符串,尽管文本仍然限制为32K)。错误中的位置226是字符串文字的开头引号,因此出现了意外的命令结尾:解析器在放弃之前返回到该位置。但是,再次强调,最好将其放到邮件列表中;我已经有一段时间没有看到Jiri这样做了。是否可以用一次插入来生成一个插入,然后再生成一个通过多次更新将其余数据连接到blob?这正是我想知道的。小迁移的问题是,最终它会变得足够大,再次抛出。所以必须有另一种方法,对吗?@Markrottveel可能是的。立即弹出的问题是完成了一半的更新。@BrunoXavier不是关于迁移,但是关于model.True。我更担心从脚本手动执行(这是有效且受支持的场景)。我为它创建了一个票证(),以保留引用。