2015-12-22 61 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(),因爲他們給我我想要的。