Sql server 在实体框架中使用视图
我在一个项目中使用实体框架,但是我发现大型查询,特别是那些使用左连接的查询,编写起来非常繁琐,而且很难调试 使用数据库中的视图,然后在EntityFramework中使用这些视图是常见的还是公认的做法?或者这是一种不好的做法?首先创建视图。 更新你的.edmx文件。 然后像这样使用Sql server 在实体框架中使用视图,sql-server,entity-framework,view,Sql Server,Entity Framework,View,我在一个项目中使用实体框架,但是我发现大型查询,特别是那些使用左连接的查询,编写起来非常繁琐,而且很难调试 使用数据库中的视图,然后在EntityFramework中使用这些视图是常见的还是公认的做法?或者这是一种不好的做法?首先创建视图。 更新你的.edmx文件。 然后像这样使用 这个问题不是很清楚,但软件没有绝对的对错。这完全取决于你的情况 ef core中有对视图的本机支持,但ef
这个问题不是很清楚,但软件没有绝对的对错。这完全取决于你的情况 ef core中有对视图的本机支持,但ef<6中没有对视图的本机支持。至少不在当前最新版本6.3中。然而,有一个解决办法。在database first中,您通常会通过sql创建视图,当您对数据库进行反向工程时,EF会将您的视图视为普通模型,并允许您像在普通表场景中一样定期使用它。在“代码优先”中,它有点乏味。您将创建一个映射到视图中的列的POCO对象。请注意,您需要在这个POCO类中包含一个Id。比如说
public class ViewPOCO
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id {get;set;}
public string ViewColumn1 {get;set;}
... etc.
}
您可以在DbContext中添加这个POCO类
public class MyDbContext : DbContext
{
public virtual DbSet<ViewPOCO> MyView {get;set;}
}
现在,您通常将通过PackageManager控制台应用添加迁移的命令
Add-Migration <MigrationName> <ConnectionString and provider Name>
现在,在上下迁移过程中,您将注意到EF将模型视为表。您可以清除所有这些,然后编写自己的sql,使用sql函数在up方法中添加/更改视图,在down方法中删除视图
public override void Up()
{
Sql("CREATE OR ALTER VIEW <ViewName> AS SELECT NEWID() AS Id, ...");
}
public override void Down()
{
Sql("DROP VIEW <ViewName>");
}
我要问的是,在实体框架中使用视图是否更“合适”。我想知道是否可以接受使用视图进行更复杂的左连接,而不是使用linq。拥有一个视图比通过linq连接所有数据更合适,因为视图是在SQLlike SP中预编译的,这样可以更快地返回结果。视图不需要将所有数据类型从SQL转换/强制转换为C数据类型,这样可以加快转换速度。。。所以,如果你有越来越多的数据,你会希望使用视图,而不是经典的EFF,即使我自己也是EF迷。快乐编辑即使这个评论来得有点晚了+1我昨天也在为此挣扎。我想知道如何首先使用代码创建视图…如何在不使用连接语法的情况下进行左连接:一些使用旧数据库的人正试图从视图中移开:
public override void Up()
{
Sql("CREATE OR ALTER VIEW <ViewName> AS SELECT NEWID() AS Id, ...");
}
public override void Down()
{
Sql("DROP VIEW <ViewName>");
}