繁体   English   中英

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

[英]Create SQL View With Entity Framework 6 Code First

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

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

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

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

科林和凯文,感谢您在另一篇文章中找到答案的链接和简明的答案。 我已经使用了几个资源来最终基于新的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方法。 然后,我通过注释掉表创建语句(实体框架尝试创建一个表但我们真的想要创建一个视图并将其映射到实体)并插入我自己的视图创建sql语句然后按照科林的答案中的步骤进行操作。 Up方法。 在创建可能依赖的任何表之后放置create语句非常重要。 我还在Configuration.Seed方法中执行了Seed活动,而不是在Context的Seed方法中。 我知道如果您处理多个迁移,这将是多么重要。 最后,正如Colin建议我将表映射添加到我的上下文的OnModelCreating事件中。
  4. 最后一步是将迁移实际应用于数据库。 为此,请在程序包管理器控制台中执行Update-Database命令。 该语句将使用您在先前步骤中创建和编辑的“初始”迁移重建数据库。

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

您可以手动添加sql以创建迁移视图,然后根据您的第一个链接使用它。

科林提供的链接中的答案完成了这项工作。

如果要创建大量视图,最好将视图查询保存在单独的文件中,并将它们添加到资源(.resx)文件中,而不是在Migration Up()中对sql查询进行硬编码方法。

例如

public override void Up()
{
    Sql("ResourceFileName.ResourceName");
}

而不是硬编码

{
        Sql("EXEC ('CREATE View [dbo].[ClientStatistics] AS --etc");
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM