gpt4 book ai didi

c# - 如何将 DbSet 转换为 List

转载 作者:可可西里 更新时间:2023-11-01 08:55:07 25 4
gpt4 key购买 nike

鉴于以下简化的 Entity Framework 6 上下文,我试图用实体填充一个列表,但在如何通过反射进行转换(我相信)方面遇到了问题。

public class FooContext : DbContext
{
public virtual IDbSet<FooClass> Foo { get; set; }
//...
}

public class FooClass
{
public int Id{ get; set; }
public string Name {get; set; }
//...
}

public main()
{
using (var context = new FooContext())
{
var sets = typeof(FooContext).GetProperties().Where(pi => pi.PropertyType.IsInterface && pi.PropertyType.GetGenericTypeDefinition().ToString().ToLower().Contains("idbset"));

foreach (var set in sets)
{
//When I debug and enumerate over 'value' the entire results are shown so I believe the reflection part is OK.
var value = set.GetValue(context, null);

//Always returns null. How can I cast DbSet<T> to List<object> or List<T>?
var list = value as List<object>();

//...
}
}
}

我正在为我正在做的一些集成测试的实用方法做这个。我试图在不使用直接内联 SQL 调用(使用 SqlConnection 和 SqlCommand 等)访问数据库的情况下执行此操作(因为数据存储可能更改为 Oracle 等)。

最佳答案

IDBSet继承自IQueryable<TEntity> , IEnumerable<TEntity> , IQueryable , 和 IEnumerable ,所以你不能直接将它转换为列表。你可以获得 List<TEntity> DBSet 中的所有实体虽然通过使用 .ToList().ToListAsync()

虽然这会在内存中创建所有实体的副本,因此您应该考虑直接在 DBSet 上使用 LINQ 进行操作

关于c# - 如何将 DbSet<T> 转换为 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30845579/

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