2015-12-22 1 views
2

Я создаю приложение MVC с ASP.NET MVC 5, и он использует Entity Framework для работы с базой данных..NET. Есть ли способ поиска DbSet в Microsoft.Data.Entity?

Это простое приложение с функциональностью 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.Entity вместо System.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)

Однако, нет Find метода в Microsoft.Data.Entity. Какие-нибудь предложения о том, куда я могу идти?

+1

Вот еще об этом: http://stackoverflow.com/questions/29030472/dbset-doesnt-have-a-find-method-in-ef7 – KrishnaDhungana

ответ

5

Find() метод не существует в новой версии инфраструктуры Entity (EF 7 на сегодняшний день). Согласно странице github issue, они добавили это к своему отставанию, так как многие люди запрашивают методы Find и FindAsync. Таким образом, это может быть доступно в будущей версии.

В настоящем время, Вы можете использовать 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(), поскольку они дают мне то, что я хочу.

Смежные вопросы