具有现有数据库视图的Entity Framework Code First

时间:2018-08-16 17:45:25

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

我的团队正在使用Entity Framework Code First启动一个新项目。我们有一个用于该项目的新的空数据库;模式将通过Code First迁移进行管理。

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

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

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

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

使用“实体框架代码优先”是否可以进行此配置,还是我们需要切换到“数据库优先”?

我们正在使用Entity Framework Core 2.1.1版。

1 个答案:

答案 0 :(得分:1)

没有能够同时满足这两个要求的配置,并且我不明白数据库优先(或代码第二优先)如何提供帮助,因为问题出在迁移而不是映射上。

通过将视图映射为表(通常是[Table]数据注释或ToTable流利的API)可以轻松满足要求#2。对于EF CRUD操作,只要具有相应名称的实际db对象支持相应的SQL命令,它实际上就无关紧要。

上述解决方案无法满足要求#1,但是很容易解决。由于EF Core需要预先创建的代码迁移(没有像EF6这样的自动迁移),因此您可以手动编辑包含CreateTable中的Up / DropTable中的Down的迁移,只需删除他们。

实际上,还有一种基于custom MigrationSqlGenerator的解决方案,但是它更复杂,并且不值得为单个视图付出努力。