【问题标题】:EntityFrameWork Core 5.0 tries to drops dbset from raw queries which do not existEntityFrameWork Core 5.0 尝试从不存在的原始查询中删除 dbset
【发布时间】:2020-11-30 01:46:35
【问题描述】:

我在我的 dbcontext 中为我的 Raw Queries 或 StoredProcs 创建了 DbSet,并在 OnModelCreating 下使用了modelBuilder.Entity<_Entity>().HasNoKey().ToView(null)。我在我的控制器中使用它们,如下所示:

_context._RTable.FromSqlRaw("exec sp_Run @thiscasenumber", casenumber).AsNoTracking().ToList();

它曾经在 EF Core 3.1 上运行良好。 我最近将我的解决方案升级到 5.0。现在,当我尝试进行添加迁移时,它第一次完成这项工作并且一切正常,但是没有进行任何更改,在更新数据库之后,当我再次运行添加迁移时,它会创建一个迁移并尝试删除这些不存在的实体。 migrationBuilder.DropTable(name: "_RTable");

有什么方法可以防止 EF 删除这些不存在的“表”?

谢谢

【问题讨论】:

  • 我遇到了完全相同的事情,但找不到解决方案。很高兴听到我并不孤单。 stackoverflow.com/questions/65085351/…
  • 我在一个新项目上尝试过,但它没有做同样的行为!我希望找到一种方法来防止 ef core 丢弃列,但到目前为止还没有运气...我可能会创建一个新项目并手动将所有内容移到那里以查看它的进展情况...

标签: c# entity-framework-core database-migration ef-core-5.0


【解决方案1】:

这是由于 .NET 5 中 .ToView(null) 行为的重大变化造成的。

基于this post,您应该使用.ToTable("ViewName", t => t.ExcludeFromMigrations()) 从迁移中排除实体集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2019-07-24
    • 1970-01-01
    • 2018-10-23
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多