首先用实体框架6代码创建SQL视图
本文关键字:代码 创建 SQL 视图 框架 实体 | 更新日期: 2023-09-27 18:05:43
我是新的实体框架6代码第一,我试图执行我认为会是一个简单的任务。我想创建一个SQL视图,然后在我的数据库上下文中有一个实体,我可以用它来查询视图。
我已经尝试过这样的文章,但在我的情况下,关键的区别是SQL视图不是来自另一个现有数据库的现有视图。
我检查了本文中提出的命题,但对我来说,我需要创建一些扩展方法来做一些像创建视图/实体组合这样简单的事情,并在我的数据库上下文中使用它,这似乎有点小题大做。
我错过了什么吗?我知道这将是更容易,如果我不使用代码第一,但请记住这是代码第一,我正试图创建一个视图,而不是重用一个从现有的数据库。
Colin和Kevin,感谢你们在另一个帖子上的答案链接和你们简洁的回答。我使用了一些资源,最终基于一个新的SQL视图创建了一个可查询的实体。为了防止其他人是EF 6.0 Code First的新手,并且刚刚开始尝试,我确实有一些步骤,希望能在未来对其他人有益。
- 对于经验丰富的实体框架开发人员来说,这似乎是显而易见的,但为了执行"迁移"方法,您需要禁用自动迁移,并真正深入到代码优先迁移内部工作的核心。由于自动迁移是开箱即用的,所以我已经创建了一个相当复杂的数据库,其中的种子脚本都依赖于自动迁移,并在每次运行应用程序时重新构建数据库。这篇文章帮助我清除了我的迁移历史,并在关闭自动迁移的情况下重新开始(我选择了web)。配置方法,如果你想知道) 在清除了迁移信息之后,我从解决方案资源管理器中删除了mdf。这保证了我在运行Update-Database时不会遇到任何问题。在Package manager控制台中,我然后执行Add-Migration Initial来生成一个"Initial"迁移。这样做的结果就是可编辑的Up和Down方法,正如Colin的回答所描述的那样。然后,我按照Colin回答的步骤注释了表创建语句(实体框架尝试创建表,但我们真的想创建一个视图并将其映射到实体),并在Up方法的末尾插入我自己的视图创建sql语句。将create语句放在它可能依赖的任何表的创建之后是很重要的。我还在配置中执行了Seed活动。Seed方法,而不是在我的Context的Seed方法中。我明白,如果您正在处理多个迁移,这将是多么重要。最后,正如Colin建议的那样,我将表映射添加到上下文的OnModelCreating事件中。
- 最后一步是将迁移实际应用到数据库。为了做到这一点,在Package Manager控制台中执行Update-Database命令。该语句将使用您在前面步骤中创建和编辑的"Initial"迁移重新构建数据库。
它仍然让我感到惊讶,我需要做所有这些自定义工作来创建一个视图,并将其映射到代码优先的实体,但在一天结束时,它有助于让我开始迁移,因为你只能依赖"自动迁移"这么长时间。
您可以手动添加sql来创建迁移视图,然后按照您的第一个链接使用它。
Colin提供的链接中的答案可以解决这个问题。
如果要创建很多视图,最好将视图查询保存在单独的文件中,并将它们添加到资源(.resx)文件中,而不是在Migration Up()方法中硬编码sql查询。
例如
public override void Up()
{
Sql("ResourceFileName.ResourceName");
}
而不是像
那样硬编码{
Sql("EXEC ('CREATE View [dbo].[ClientStatistics] AS --etc");
}