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

时间:2014-06-15 15:50:23

标签: stored-procedures ef-code-first views

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

1 个答案:

答案 0 :(得分:4)

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

public TestContext : DbContext
{
    public DbSet<User> AdminUsers { get; set; }
}

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

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

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

或者通过DbSet类的SqlQuery函数:

var newUsers = context.Users.SqlQuery("dbo.GetNewUsers @p0", count);

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

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