我正在使用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(options => options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); services.AddMvc(); }
这要求我使用Microsoft.Data.Entity
而不是System.Data.Entity
.
这是MyDbContext
班级:
public class MyDbContext : DbContext { public virtual DbSetTestModels { 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
.关于我可以从哪里去的任何建议?
Find()
新版本的Entity框架(截至今天的EF 7)中不存在方法.根据github 问题页面,他们将这个添加到他们的待办事项中,因为很多人都在请求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
模型的主键.
有一些解决方法,比如写这里描述的扩展方法.但我更喜欢FirstOrDefault()
或者FirstOrDefaultAsync()
因为他们给了我想要的东西.