c# – Entity Framework 4.3.1始终在Update-Database上运行所有迁移
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Entity Framework 4.3.1始终在Update-Database上运行所有迁移,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3151字,纯文字阅读大概需要5分钟。
内容图文
![c# – Entity Framework 4.3.1始终在Update-Database上运行所有迁移](/upload/InfoBanner/zyjiaocheng/791/a9feffea48a749a89ee45771d7e339a4.jpg)
我使用Add-Migration创建了初始迁移.当我在空DB上运行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
似乎更新不知道当前的DB状态.唯一的解决方案是删除所有表并进行更新.如果我添加更多迁移,这也适用.
如您所见,我使用的是不同于通常的数据库提供程序(Devart.Data.Mysql),但我不确定问题是否存在.也许我错过了一些微不足道的事情?
解决方法:
与DevArt通信后问题得到解决.我从未在运行Enable-Migrations时生成的Configuration类中调用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始终在Update-Database上运行所有迁移全部内容,希望文章能够帮你解决c# – Entity Framework 4.3.1始终在Update-Database上运行所有迁移所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。