Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如何使用EF创建视图或计算表_Sql Server_Asp.net Mvc_Entity Framework - Fatal编程技术网

Sql server 如何使用EF创建视图或计算表

Sql server 如何使用EF创建视图或计算表,sql-server,asp.net-mvc,entity-framework,Sql Server,Asp.net Mvc,Entity Framework,我在ASP.NET MVC应用程序中首先使用实体框架代码。如何在数据库中创建视图,以便使用JOIN从以下两个表中获取记录 class Department { [Key] public int DepartmentId { get; set; } public string Name { get; set; } public string Location { get; set; } public List<Employee> Employee

我在ASP.NET MVC应用程序中首先使用实体框架代码。如何在数据库中创建视图,以便使用JOIN从以下两个表中获取记录

class Department
{
    [Key]
    public int DepartmentId { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }
    public List<Employee> Employees { get; set; }
}

class Employee
{
    [Key]
    public int Id { get; set; }
    [Column("First_Name")]
    public string FirstName { get; set; }
    [Column("Last_Name")]
    public string LastName { get; set; }
    public string Gender { get; set; }
    public int Salary { get; set; }
    public int DepartmentId { get; set; }
    [ForeignKey("DepartmentId")]
    public Department Department { get; set; }
}
班级部门
{
[关键]
public int DepartmentId{get;set;}
公共字符串名称{get;set;}
公共字符串位置{get;set;}
公共列表雇员{get;set;}
}
班级员工
{
[关键]
公共int Id{get;set;}
[列(“名字”)]
公共字符串名{get;set;}
[列(“姓氏”)]
公共字符串LastName{get;set;}
公共字符串{get;set;}
公共整数{get;set;}
public int DepartmentId{get;set;}
[外键(“部门ID”)]
公共部门部门{get;set;}
}

您可以根据视图的返回类型创建一个模型,然后创建 使用Sql方法在迁移内部查看:

public partial class Migration : DbMigration
{
  public override void Up()
  {
      this.Sql("CREATE VIEW dbo.MyView AS (etc)");
  }

  public override void Down()
  {
      this.Sql("DROP VIEW dbo.MyView");
  }
}
在dbContext中,将实体映射到视图没有任何问题:

public class MyDbContext : DbContext
{
  public DbQuery<MyModelView> MyView
  {
     get
     {
        // Don't track changes to query results
        return Set<MyModelView>().AsNoTracking();
    }
  }
}
公共类MyDbContext:DbContext
{
公共数据库查询MyView
{
得到
{
//不跟踪对查询结果的更改
返回集().AsNoTracking();
}
}
}

您可以根据视图的返回类型创建一个模型,然后创建 使用Sql方法在迁移内部查看:

public partial class Migration : DbMigration
{
  public override void Up()
  {
      this.Sql("CREATE VIEW dbo.MyView AS (etc)");
  }

  public override void Down()
  {
      this.Sql("DROP VIEW dbo.MyView");
  }
}
在dbContext中,将实体映射到视图没有任何问题:

public class MyDbContext : DbContext
{
  public DbQuery<MyModelView> MyView
  {
     get
     {
        // Don't track changes to query results
        return Set<MyModelView>().AsNoTracking();
    }
  }
}
公共类MyDbContext:DbContext
{
公共数据库查询MyView
{
得到
{
//不跟踪对查询结果的更改
返回集().AsNoTracking();
}
}
}

使用Database.ExecuteSqlCommand()可以触发任何类型的DDL命令

using(var edb = new EmployeeDB()
{
edb.Database.ExecuteSqlCommand("CREATE VIEW MyView AS SELECT TOP 3 
e.First_Name, e.Last_Name, e.Gender, e.Salary, d.Name as Deparment_Name, 
d.Location as Department_Location FROM tblEmployees e JOIN tblDepartments d on 
e.DepartmentId=d.DepartmentId");
}

通过使用Database.ExecuteSqlCommand()可以触发任何类型的DDL命令

using(var edb = new EmployeeDB()
{
edb.Database.ExecuteSqlCommand("CREATE VIEW MyView AS SELECT TOP 3 
e.First_Name, e.Last_Name, e.Gender, e.Salary, d.Name as Deparment_Name, 
d.Location as Department_Location FROM tblEmployees e JOIN tblDepartments d on 
e.DepartmentId=d.DepartmentId");
}

好的,到目前为止你尝试了什么?我是EF代码新手,首先寻找解决方案。好的,到目前为止你尝试了什么?我是EF代码新手,首先寻找解决方案。你好,Saneesh,我正在尝试此代码,但此语句“Set().AsNoTracking()”抛出并出错。System.InvalidOperationException:'实体类型MyModel不是当前上下文的模型的一部分。'但谢谢..您好,Saneesh,我正在尝试此代码,但此语句“Set().AsNoTracking()”抛出并出错。System.InvalidOperationException:“实体类型MyModel不是当前上下文的模型的一部分。”但谢谢。。