FindAsync和Include LINQ语句
我到目前为止的代码工作得很好
public async Task Details(Guid? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } ItemDetailModel model = new ItemDetailModel(); model.Item = await db.Items.FindAsync(id); if (model.Item == null) { return HttpNotFound(); } return View(model); }
但是我想要包含1个表,不能使用FindAsync
public async Task Details(Guid? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } ItemDetailModel model = new ItemDetailModel(); model.Item = await db.Items.Include(i=>i.ItemVerifications).FindAsync(id); if (model.Item == null) { return HttpNotFound(); } return View(model); }
所以我面临这个错误
严重级代码描述项目文件行抑制状态错误CS1061’IQueryable’不包含’FindAsync’的定义,并且没有扩展方法’FindAsync’可以找到接受类型’IQueryable’的第一个参数(你是否缺少using指令或assembly参考?)
有任何线索如何修复它?
最简单的方法是使用FirstOrDefaultAsync
或SingleOrDefaultAsync
:
model.Item = await db.Items.Include(i => i.ItemVerifications) .FirstOrDefaultAsync(i => i.Id == id.Value);
您收到错误的原因是因为为DbSet
定义了Find
/ FindAsync
方法,但Include
的结果是IQueryable
。
另一种方法是将FindAsync
与显式加载相结合:
model.Item = await db.Items.FindAsync(id); if (model.Item == null) { return HttpNotFound(); } await db.Entry(model.Item).Collection(i => i.ItemVerifications).LoadAsync();
如果您使用的是通用存储库,并且在运行时不了解PK,则此方法可以提供帮助:
public interface IGenericRepository where TEntity : class { Task Get(int id, string[] paths = null); } public class GenericRepository : IGenericRepository where TEntity : class { private readonly ApplicationDbContext _context; private readonly DbSet _dbSet; public GenericRepository(ApplicationDbContext context) { _context = context; _dbSet = _context.Set (); } public async Task Get(int id, string[] paths = null) { var model = _dbSet.FindAsync(id); foreach (var path in paths) { _context.Entry(model.Result).Reference(path).Load(); } return await model; } }
- 在Visual Studio中生成Apple Passbook优惠券/ S-MIME签名
- 如何在GTK#Spin Button中正确对齐数字?
- 挂钩SetConsoleCtrlHandler时没有堆栈跟踪的NullReferenceException
- 使用json文件的Asp.net核心本地化
- 为什么我的方法调用Assembly.GetCallingAssembly()不是JIT内联?
- 属性不会被序列化到.designer.cs文件中
- itextsharp:如何使用itextsharp在PDF中生成包含动态标头的报告?
- 将RAW图像文件读取为GDI +位图
- 如何使用System.DirectoryServices.ActiveDirectory.Domain类获取域别名