c# - 具有现有数据库 View 的 Entity Framework 代码优先

标签 c# database entity-framework migration entity-framework-core

我的团队正在使用 Entity Framework Code First 开始一个新项目。我们为该项目创建了一个新的空数据库;该架构将通过代码优先迁移进行管理。

但是,我们需要访问一个位于外部数据库(由不同项目管理)中的数据。我们可以通过自己数据库中的 View 访问这些数据,该 View 映射到外部数据库中的表。

由于这种设置,我们有两个相互竞争的要求:

  1. 创建迁移时, Entity Framework 不应尝试创建或编辑 View 。
  2. 在运行时,我们应该仍然能够使用 Entity Framework 通过 View 查询/插入/更新/删除数据,就好像它是一个常规表一样。

我们已经查看了 [NotMapped] 属性和 .Ignore() 方法,但两者似乎都只满足上述两个要求之一。

这种配置是否可以使用 Entity Framework Code First,还是我们需要切换到 Database First?

我们使用的是 Entity Framework Core 版本 2.1.1。

最佳答案

没有同时满足这两个要求的配置,而且我看不出数据库优先(或代码优先)有何帮助,因为问题在于迁移,而不是映射。

要求 #2 可以通过将 View 映射为表(传统的 [Table] 数据注释或 ToTable 流畅的 API)轻松满足。对于 EF CRUD 操作,具有该名称的实际数据库对象是表还是 View 并不重要,只要它支持相应的 SQL 命令即可。

上述解决方案无法满足要求 #1,但可以轻松解决。由于 EF Core 需要预先创建的代码迁移(没有像 EF6 那样的自动迁移),您可以在 Up/DropTable 中手动编辑包含 CreateTable 的迁移在 Down 中并简单地删除它们。

其实也有基于custom MigrationSqlGenerator的解决方案, 但它更复杂,不值得为单个 View 付出努力。

关于c# - 具有现有数据库 View 的 Entity Framework 代码优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51882660/

相关文章:

c# - 将位置添加到单独的配置文件

c# - 大型静态对象列表的哪个数据绑定(bind)选项?

c# - 会计数据库 - 存储交易

java - 我是否应该始终关闭 CachedRowSet,即使它超出范围?

C# Mysql 与 Entity Framework 错误 - 无法更新 EDMX 文件

entity-framework - EntityFramework 给出 IDisposable 错误

c# - 将 SQL 2012 FORMAT 函数与 LINQ to Entity Framework 结合使用

c# - 如何获取我的 Web 应用程序的基本 URL?

sql - 使用条件更新单个 sql 查询中的多个列

c# - 如何在 NUnit 中编写集成测试?