DbSet 在 EF7 中没有 Find 方法

编程入门 行业动态 更新时间:2024-10-08 22:49:47
本文介绍了DbSet 在 EF7 中没有 Find 方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试创建一个通用存储库来访问我的数据库.在 EF6 中,我能够这样做以获得特定实体:

I am trying to create a generic repository to access my database. In EF6 I was able to do that in order to get a specific entity:

protected IDbSet<T> dbset; public T Get(object id) { return this.dbset.Find(id); }

EF7 中的 DbSet 缺少 Find 方法.有没有办法实现上面这段代码?

DbSet in EF7 is missing a Find method. Is there a way to implement the above piece of code?

推荐答案

这里是作为扩展方法的 .Find() 的一个非常粗糙、不完整且未经测试的实现.如果不出意外,它应该能让你指明正确的方向.

Here's a very crude, incomplete, and untested implementation of .Find() as an extension method. If nothing else, it should get you pointed in the right direction.

实际实现由 #797 跟踪.

static TEntity Find<TEntity>(this DbSet<TEntity> set, params object[] keyValues) where TEntity : class { var context = ((IAccessor<IServiceProvider>)set).Service.GetService<DbContext>(); var entityType = context.Model.GetEntityType(typeof(TEntity)); var key = entityType.GetPrimaryKey(); var entries = context.ChangeTracker.Entries<TEntity>(); var i = 0; foreach (var property in key.Properties) { var keyValue = keyValues[i]; entries = entries.Where(e => e.Property(property.Name).CurrentValue == keyValue); i++; } var entry = entries.FirstOrDefault(); if (entry != null) { // Return the local object if it exists. return entry.Entity; } // TODO: Build the real LINQ Expression // set.Where(x => x.Id == keyValues[0]); var parameter = Expression.Parameter(typeof(TEntity), "x"); var query = set.Where((Expression<Func<TEntity, bool>>) Expression.Lambda( Expression.Equal( Expression.Property(parameter, "Id"), Expression.Constant(keyValues[0])), parameter)); // Look in the database return query.FirstOrDefault(); }

更多推荐

DbSet 在 EF7 中没有 Find 方法

本文发布于:2023-11-15 06:25:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1591940.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:方法   DbSet   Find

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!