2015-12-22 28 views
2

我使用ASP.NET MVC 5创建了一个MVC应用程序,它使用实体框架来处理数据库。.NET - Microsoft.Data.Entity中是否有DbSet Find方法?

这是一个具有CRUD功能的简单应用程序,用于将数据项添加到列表中。我可以创建项目并将它们保存到数据库,现在我想查看特定项目的页面。

我在之前的应用程序中使用Find方法在DbSet对象上完成了此操作,但该方法是System.Data.Entity的一部分。我能够创建一个应用程序这种方式,而是用ASP.NET 5,它看起来像我需要以不同的配置数据库连接,使用这些线Startup.cs

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddEntityFramework() 
      .AddSqlServer() 
      .AddDbContext<MyDbContext>(options => 
      options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); 

     services.AddMvc(); 
    } 

这需要我用,而不是Microsoft.Data.EntitySystem.Data.Entity

这里是MyDbContext类:

public class MyDbContext : DbContext 
{ 

    public virtual DbSet<TestModel> TestModels { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder options) 
    { 
     options.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Database=EmptyMVCAuthentication01;integrated security=True;"); 
    } 
} 

我想要的操作来查看特定页面,做这样的事情:

public IActionResult Details(int id) 
    { 
     Course course= db.Courses.Find(id); 
     return View(course); 
    } 

db以上是MyDbContext一个私有的实例)

但是,Microsoft.Data.Entity中没有Find方法。关于我可以从哪里出发的任何建议?

+1

这里是一些更多关于此:http://stackoverflow.com/questions/29030472/dbset-doesnt-have-a-find-method-in-ef7 – KrishnaDhungana

回答

5

Find()方法在新版本的实体框架(EF 7截至今天)中不存在。根据github issue页面,他们将这个添加到他们的积压,因为很多人要求FindFindAsync方法。所以这可能在未来的版本中可用。

现在,您可以使用FirstOrDefault()根据需要,

public IActionResult Details(int id) 
{ 
    var course= db.Courses.FirstOrDefault(d=>d.Id==id); 
    if(course==null) 
    { 
     return View("NotFound"); 
    } 
    return View(course); 
} 

假设Id是你Course模型的主键。

有一些解决方法,如编写您所描述的扩展方法here。但我更喜欢FirstOrDefault()FirstOrDefaultAsync(),因为他们给我我想要的。