使用Entity Framework 6 Code First创建SQL视图

use*_*760 4 c# sql-server entity-framework ef-code-first

我是Entity Framework 6 Code First的新手,我正在尝试执行我认为简单的任务.我想创建一个SQL视图,然后在我的数据库上下文中有一个Entity,我可以使用它来查询视图.

我曾尝试如文章但对我来说最关键的区别是,SQL视图是不是从另一个现有的数据库即将现有视图.

我检查了本文中提出的命题,但对我来说似乎有点过分,我需要创建一些扩展方法来做一些简单的事情,比如创建一个视图/实体组合并在我的数据库上下文中使用它.

我错过了什么吗?我知道如果我不使用Code First会更容易,但请记住它是Code First,我正在尝试创建一个视图,而不是重用现有数据库中的视图.

use*_*760 7

科林和凯文,感谢您在另一篇文章中找到答案的链接和简明的答案.我已经使用了几个资源来最终基于新的SQL视图创建可查询实体.为了防止其他人对EF 6.0 Code First不熟悉而且只是沾沾自喜,我确实会采取一些措施,希望将来能够让其他人受益.

  1. 对于经验丰富的实体框架开发人员来说,这似乎是显而易见的,但是为了执行"迁移"方法,您需要禁用自动迁移,并实际深入了解Code First Migrations内部工作的内容.由于自动迁移是开箱即用的,我已经使用种子脚本创建了一个相当复杂的数据库,所有这些都依赖于自动迁移并在每次运行我的应用程序时重建数据库.这篇文章帮助我擦除了我的迁移历史,并在关闭自动迁移的情况下进入了方块1(我使用web.config方法,以防您想知道)
  2. 在我清除了迁移信息之后,我从解决方案资源管理器中删除了mdf.这保证了我在运行Update-Database时不会遇到任何问题(在步骤列表的下方).
  3. 在Package Manger控制台中,我然后执行Add-Migration Initial以生成"初始"迁移.结果是Colin的答案中描述的可编辑的Up和Down方法.然后,我通过注释掉表创建语句(Entity Framework尝试创建一个表但我们真的想要创建一个视图并将其映射到实体)并在最后插入我自己的视图创建sql语句来遵循Colin的答案中的步骤Up方法.在创建可能依赖的任何表之后放置create语句非常重要.我还在Configuration.Seed方法中执行了Seed活动,而不是在Context的Seed方法中.我知道如果您处理多个迁移,这将是多么重要.最后,正如Colin建议我将表映射添加到我的上下文的OnModelCreating事件中.
  4. 最后一步是将迁移实际应用于数据库.为此,请在程序包管理器控制台中执行Update-Database命令.该语句将使用您在先前步骤中创建和编辑的"初始"迁移重建数据库.

我仍然感到惊讶的是,我需要完成所有这些自定义工作来创建视图并将其映射到具有Code First的实体,但在一天结束时,它有助于我开始迁移,因为您只能依赖无论如何,"自动迁移"已经很久了.


小智 0

您可以手动添加 SQL 以将视图创建到迁移,然后按照第一个链接使用它。