Sql server 如何使用EF创建视图或计算表
我在ASP.NET MVC应用程序中首先使用实体框架代码。如何在数据库中创建视图,以便使用JOIN从以下两个表中获取记录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
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不是当前上下文的模型的一部分。”但谢谢。。