gpt4 book ai didi

c# - Entity Framework 4.3.1 始终在更新数据库上运行所有迁移

转载 作者:可可西里 更新时间:2023-11-01 07:33:25 26 4
gpt4 key购买 nike

我已经使用 Add-Migration 创建了一个初始迁移。当我在空数据库上运行 Update-Database 时,它会创建所有表,包括在 __MigrationHistory 表中添加一个条目。

现在我再次运行 Update-Database 只是为了测试,而不是“未检测到任何更改”,我得到了这个:

PM> Update-Database -Verbose -Project testProject.Web
Using StartUp project 'testProject.Web'.
Target database is: 'testProject_dbo' (DataSource: localhost, Provider: Devart.Data.MySql, Origin: Explicit).
Applying explicit migrations: [201203151243164_Start].
Applying explicit migration: 201203151243164_Start.
CREATE TABLE attachments (
...table data...
)
Table 'attachments' already exists
Table 'attachments' already exists

更新似乎不知道当前的数据库状态。唯一的解决办法是删除所有表并更新。如果我添加更多迁移,这也有效。

如您所见,我使用的是与平常不同的数据库提供程序 (Devart.Data.Mysql),但我不确定问题是否存在。也许我遗漏了一些微不足道的东西?

最佳答案

DevArt沟通后问题解决.我从未在运行 Enable-Migrations 时生成的配置类中调用 IgnoreSchemaName 解决方法。总而言之,这是使它最终起作用的类:

internal sealed class Configuration : DbMigrationsConfiguration<YourDbContext>
{
public Configuration()
{
// Because the Package Manager Console (NuGet) instantiates YourDbContext with the empty constructor,
// a custom connection must be specified. Based on http://www.devart.com/blogs/dotconnect/?p=5603
// Note that the MySqlProviderFactory must also be present in Web.config or App.config in the *startup project*
// for this to work! Configuration example:

/*
<system.data>
<DbProviderFactories>
<clear />
<remove invariant="Devart.Data.MySql" />
<add name="dotConnect for MySQL" invariant="Devart.Data.MySql" description="Devart dotConnect for MySQL" type="Devart.Data.MySql.MySqlProviderFactory, Devart.Data.MySql, Version=6.30.196.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
</DbProviderFactories>
</system.data>
*/

// Apply the IgnoreSchemaName workaround
MySqlEntityProviderConfig.Instance.Workarounds.IgnoreSchemaName = true;

// Create a custom connection to specify the database and set a SQL generator for MySql.
var connectionInfo = MySqlConnectionInfo.CreateConnection("<Your ConnectionString>");

TargetDatabase = connectionInfo;
SetSqlGenerator(connectionInfo.GetInvariantName(), new MySqlEntityMigrationSqlGenerator());

// Enable automatic migrations if you like
AutomaticMigrationsEnabled = false;

// There is some problem with referencing EntityFramework 4.3.1.0 for me, so another fix that needs
// to be applied in Web.config is this:

/*
<runtime>
<assemblyBinding>
<!-- This redirection is needed for EntityFramework Migrations through the Package Manager Console (NuGet) -->
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
<bindingRedirect oldVersion="4.3.0.0" newVersion="4.3.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
*/

// After these Web.config additions, running migrations in Package Manager Console should be as easy as:
// Update-Database -Verbose -ProjectName Your.MigrationsProject

// Creating new migrations:
// Add-Migration -Name MigrationDescription -ProjectName Your.MigrationsProject
}
}

之后我再次清空数据库以生成正确的迁移历史条目,一切都很好。 DevArt提供有关配置的更多详细信息。

关于c# - Entity Framework 4.3.1 始终在更新数据库上运行所有迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com