我正在使用 ASP.NET MVC 5 创建一个 MVC 应用程序,它使用 Entity Framework 来处理数据库。
这是一个简单的应用程序,具有 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
的私有(private)实例)
但是,没有 Find
Microsoft.Data.Entity
中的方法。关于我可以从这里去哪里有什么建议吗?
最佳答案
新版本的 Entity Framework (截至目前的 EF 7)中不存在
Find()
方法。根据 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()
因为它们给了我我想要的东西。
关于c# - .NET - Microsoft.Data.Entity 中是否有 DbSet Find 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34407123/