gpt4 book ai didi

c# - MVC3/EF - 更改模型...数据库架构不匹配

转载 作者:太空狗 更新时间:2023-10-29 23:18:25 24 4
gpt4 key购买 nike

我一直在关注 ASP.Net Movie Database Tutorial ,一切顺利。

我刚刚更改了模型并添加了一个属性。说我很好奇,但我不想遵循只删除数据库的指南 - 我想看看我是否可以修改。

correct error出现了不匹配的情况 - 这是预料之中的。

我将评级列添加到数据库中,一切正常。

接下来,我删除了 ratings 列,因为我想按照教程进行操作并了解 DropCreateDatabaseIfModelChanges - 但是,我只是收到错误消息 Invalid column name 'Ratings'.

一直以来,ModelHash 条目都没有改变,我不知道它是怎么知道现在和以前有区别的。

所以 - 1) 我搞砸了吗?

2) 我该如何解决?

3) 它怎么知道之前发生了一些变化,但现在哈希值没有变化却不知道?

4) 您还有什么建议可以提供吗?

最佳答案

我认为你的描述一定是不正确的,因为尽管手动添加了 Rating 列,但正确的行为会抛出异常。

此行为的工作原理如下:

  1. 创建数据库时,将添加名为 EdmMetadata 的新表。
  2. EdmMetadata 包含两列 - IdModelHash
  3. 数据库创建的一部分是使用当前模型的散列存储单行。
  4. 如果数据库不是由当前上下文创建的,则上下文会在执行第一个操作之前执行查询以检索存储的模型哈希。检索到的 has 与上下文的当前哈希值进行比较。
  5. 如果哈希值不同并且数据库初始化程序不允许重新创建数据库,则抛出异常。
  6. 如果哈希相同,则执行所需的数据库操作。

手动添加 Rating 列不会更改存储的哈希值,但模型的哈希值会有所不同。

可以通过移除 IncludeMetadataConvention 约定来完全移除此行为:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove(modelBuilder.Conventions
.OfType<IncludeMetadataConvention>().ToArray());
}

关于c# - MVC3/EF - 更改模型...数据库架构不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5290862/

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