Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在实体框架中使用视图_Sql Server_Entity Framework_View - Fatal编程技术网

Sql server 在实体框架中使用视图

Sql server 在实体框架中使用视图,sql-server,entity-framework,view,Sql Server,Entity Framework,View,我在一个项目中使用实体框架,但是我发现大型查询,特别是那些使用左连接的查询,编写起来非常繁琐,而且很难调试 使用数据库中的视图,然后在EntityFramework中使用这些视图是常见的还是公认的做法?或者这是一种不好的做法?首先创建视图。 更新你的.edmx文件。 然后像这样使用 这个问题不是很清楚,但软件没有绝对的对错。这完全取决于你的情况 ef core中有对视图的本机支持,但ef

我在一个项目中使用实体框架,但是我发现大型查询,特别是那些使用左连接的查询,编写起来非常繁琐,而且很难调试

使用数据库中的视图,然后在EntityFramework中使用这些视图是常见的还是公认的做法?或者这是一种不好的做法?

首先创建视图。 更新你的.edmx文件。 然后像这样使用


这个问题不是很清楚,但软件没有绝对的对错。这完全取决于你的情况

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>");
 }