我更新模型时丢失了表格中的所有数据

时间:2011-11-17 08:15:25

标签: ef-code-first

我在我的解决方案中使用EF Code First,后面是SQL Server Express。当我更新我的模型时,我总是必须删除我的数据库才能重新启动我的解决方案。我知道这是因为我的数据库不再是最新的。在这种情况下,我丢失了表格中的所有数据。

我希望能够更新我的模型(例如:添加新字段)并将所有数据保存在表格中。

即使我手动更新我的数据库,当我重新启动解决方案时,我收到以下错误:

自创建数据库以来,支持'EntityFrameworkDbContext'上下文的模型已更改。手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer

有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以按照以下步骤删除EdmMetadata表的创建。

public class MyContext : DbContext
{

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    }
}

这样您就可以手动更新数据库而不会收到错误。

您可以查看Code First Migrations

答案 1 :(得分:0)

扩大评论范围。这通常是不可能的,CF也没有为此设计。唯一的方法是使用SQL命令手动更新表并在更新Code第一个模型之前更新存储为EDMmetadata的数据库模型验证哈希或数据库中的某些内容。

要获得正确的哈希值,您可以创建一个临时数据库,并从那里复制您的值。

不漂亮,但它有效。