我的团队正在使用Entity Framework Code First启动一个新项目。我们有一个用于该项目的新的空数据库;模式将通过Code First迁移进行管理。
但是,我们将需要访问位于外部数据库(由不同项目管理)中的一条数据。通过我们自己的数据库中的一个视图可以访问这些数据,该视图映射到外部数据库中的一个表。
由于此设置,我们有两个相互竞争的要求:
我们已经研究了[NotMapped]
属性和.Ignore()
方法,但两者似乎都只能满足上述两个要求之一。
使用“实体框架代码优先”是否可以进行此配置,还是我们需要切换到“数据库优先”?
我们正在使用Entity Framework Core 2.1.1版。
答案 0 :(得分:1)
没有能够同时满足这两个要求的配置,并且我不明白数据库优先(或代码第二优先)如何提供帮助,因为问题出在迁移而不是映射上。
通过将视图映射为表(通常是[Table]
数据注释或ToTable
流利的API)可以轻松满足要求#2。对于EF CRUD操作,只要具有相应名称的实际db对象支持相应的SQL命令,它实际上就无关紧要。
上述解决方案无法满足要求#1,但是很容易解决。由于EF Core需要预先创建的代码迁移(没有像EF6这样的自动迁移),因此您可以手动编辑包含CreateTable
中的Up
/ DropTable
中的Down
的迁移,只需删除他们。
实际上,还有一种基于custom MigrationSqlGenerator的解决方案,但是它更复杂,并且不值得为单个视图付出努力。