我在我的解决方案中使用EF Code First,后面是SQL Server Express。当我更新我的模型时,我总是必须删除我的数据库才能重新启动我的解决方案。我知道这是因为我的数据库不再是最新的。在这种情况下,我丢失了表格中的所有数据。
我希望能够更新我的模型(例如:添加新字段)并将所有数据保存在表格中。
即使我手动更新我的数据库,当我重新启动解决方案时,我收到以下错误:
自创建数据库以来,支持'EntityFrameworkDbContext'上下文的模型已更改。手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer
有什么建议吗?
感谢。
答案 0 :(得分:1)
您可以按照以下步骤删除EdmMetadata表的创建。
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}
}
这样您就可以手动更新数据库而不会收到错误。
答案 1 :(得分:0)
扩大评论范围。这通常是不可能的,CF也没有为此设计。唯一的方法是使用SQL命令手动更新表并在更新Code第一个模型之前更新存储为EDMmetadata的数据库模型验证哈希或数据库中的某些内容。
要获得正确的哈希值,您可以创建一个临时数据库,并从那里复制您的值。
不漂亮,但它有效。