我的团队正在使用 Entity Framework Code First 开始一个新项目。我们为该项目创建了一个新的空数据库;该架构将通过代码优先迁移进行管理。
但是,我们需要访问一个位于外部数据库(由不同项目管理)中的数据。我们可以通过自己数据库中的 View 访问这些数据,该 View 映射到外部数据库中的表。
由于这种设置,我们有两个相互竞争的要求:
- 创建迁移时, Entity Framework 不应尝试创建或编辑 View 。
- 在运行时,我们应该仍然能够使用 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/