.NET-Microsoft.Data.Entity中是否有DbSet Find方法

本文关键字:DbSet Find 方法 是否 Data Entity NET-Microsoft | 更新日期: 2023-09-27 18:27:43

我正在用ASP.NET MVC 5创建一个MVC应用程序,它使用实体框架来处理数据库。

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

我在以前的应用程序中对DbSet对象使用了Find方法,但该方法是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);
    }

(上面的dbMyDbContext的私有实例)

然而,在Microsoft.Data.Entity中没有Find方法。有什么建议吗?

.NET-Microsoft.Data.Entity中是否有DbSet Find方法

Find()方法在新版本的Entity框架(截至目前的EF 7)中不存在。根据github问题页面,他们将其添加到了他们的积压工作中,因为很多人都在请求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模型的主键。

有一些变通方法,比如按照这里的描述编写扩展方法。但我更喜欢FirstOrDefault()FirstOrDefaultAsync(),因为它们给了我想要的。