如何使用 EF6 Code First 创建和使用视图?

Dav*_*ave 4 stored-procedures view ef-code-first

实际上是否有通过 EF6.1 Code First 创建和使用视图的官方策略?我可以将数据库反转为 Code First 并获取表而不是视图。我可以将数据库导入到模型中并获取视图,然后从模型生成数据库,然后修改我的 edmx 并将视图转换为表。MSFT 似乎几乎放弃了 Model First,而新的 Update 2 似乎对 Code First 进行了逆向工程,因此我觉得被迫转换为 Code First,但 EF 团队是否支持任何合理的方法来使用视图或存储过程代码优先?毕竟 CF 应该创建数据库,但是什么 - 您不再应该在 .NET EF 应用程序中使用这些 SQL Server 功能中的任何一个吗?

Már*_*nka 6

对于初学者,您可以使用数据库中已创建的视图和存储过程。对于视图,如果您创建如下代码,则不必执行任何映射:

public TestContext : DbContext
{
    public DbSet<User> AdminUsers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且您在数据库中有一个名为 dbo.AdminUsers 的视图,它可以映射到 User 类(包含与该属性同名的所有必需属性)。

对于存储过程,您可以通过 DbContext 的 Database 属性使用 SqlQuery 函数,例如:

var userActivityReport = context.Database.SqlQuery<UserActivityReport>(
    "dbo.GetUserActivityReport @p0, @p1", startDate, endDate);
Run Code Online (Sandbox Code Playgroud)

或者通过DbSet类的SqlQuery函数:

var newUsers = context.Users.SqlQuery("dbo.GetNewUsers @p0", count);
Run Code Online (Sandbox Code Playgroud)

如果您想通过实体框架创建、修改或删除视图和存储过程,您可以使用自定义迁移操作,请参阅http://dolinkamark.wordpress.com/2014/05/03/creating-a-custom-migration-operation-实体框架内/

为了更好地集成活动,您可以将公共映射 API 与社区成员提供的库结合使用: https: //codefirstfunctions.codeplex.com/