gpt4 book ai didi

c# - DbSet 在 EF7 中没有 Find 方法

转载 作者:IT王子 更新时间:2023-10-29 03:51:46 25 4
gpt4 key购买 nike

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

protected IDbSet<T> dbset;

public T Get(object id)
{
return this.dbset.Find(id);
}

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

最佳答案

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

真正的实现由#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();
}

关于c# - DbSet 在 EF7 中没有 Find 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29030472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com