【发布时间】:2018-03-03 01:31:54
【问题描述】:
我遇到了一个奇怪的问题,每当我对实体的任何一个进行更改时,我的 EF 自动迁移都会从 所有 表中删除所有数据。
我见过类似的question,但是在我的一生中,我无法从我自己的实现中缺少的链接中得出什么。
请注意,该应用程序工作正常,通过 EF 检索数据并将其保存到 mysql 数据库 - 每次我想修改实体时都必须重新创建所有数据,这真是太烦人了。
我正在使用 EF6.0 和 MySql 数据库。
Context.cs
namespace Dock.Models
{
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DockContext : DbContext
{
public DockContext(): base("name=DockContext")
{
Database.SetInitializer(new DockInitializer());
}
public virtual DbSet<Profile> Profiles { get; set; }
public virtual DbSet<Dock> Docks { get; set; }
public virtual DbSet<Crate> Crates { get; set; }
public virtual DbSet<Subscription> Subscriptions { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
}
Configuration.cs
internal sealed class Configuration : DbMigrationsConfiguration<DockContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
SetSqlGenerator("MySql.Data.MySqlClient", new MySqlMigrationSqlGenerator());
CodeGenerator = new MySqlMigrationCodeGenerator();
}
protected override void Seed(DockContext context)
{
Profile admin = new Profile {
NotAPrimaryId = 168879070,
DisplayName = "Admin101"
};
context.Profiles.AddOrUpdate(a => a.NotAPrimaryId , admin);
context.SaveChanges();
}
}
以及实体的 Dock.cs
之一的示例namespace Dock.Entities
{
public class Dock
{
[Key]
public int DockId { get; set; }
public int ProfileId { get; set; }
public int GameId { get; set; }
public string GameData { get; set; }
public bool Active { get; set; }
// Navigational Properties
[ForeignKey("CrateId")]
public virtual List<Crate> Crates { get; set; } = new List<Crate>();
}
}
【问题讨论】:
-
我的建议:永远不要在你关心的环境中使用自动迁移。掀起一个概念验证?当然。团队开发、质量保证或生产环境?没有。
-
@EricJ。所以你会建议放弃自动迁移并开始编写我自己的迁移吗?该应用仍在开发中(没有真正的用户数据自动取款机)。感谢您的反馈。
-
EF 将为您创建迁移类。您不必手写它们。 msdn.microsoft.com/en-us/data/jj591621 在我的经验中,当不同的团队成员在不同的时间提交更新时,自动迁移可能会导致问题。我还不得不多次手动编辑生成的基于代码的迁移,这是自动迁移无法做到的
-
感谢@EricJ 的洞察力。
-
@EricJ。更改为手动迁移为我解决了这个问题,我非常感激。您想发布您的 cmets 作为答案吗? - 他们很有帮助。
标签: c# mysql entity-framework