将DbSet <Entity>转换为其DbSet <IEntity>,而不将所有实体都拉入内存

 ik82jht 发布于 2023-02-13 17:41

我的问题是我正在使用的系统需要Data as IQuearable和entityframework给我数据IQueryable

这是我需要实现的接口:

public IQueryable GetData() where T : class, IData {}

我有一个创建为context.Set(MyEntityType)的DbSet,其中MyEntityType是typeof(Entity).

我现在一直在尝试一些事情,不知道如何解决这个问题.(它的所有自动生成的代码来自codedom,但在下面做了一个测试,看它可以工作,但还没有工作)

我做了一个测试包装,问题在这里LINQ to Entities only supports casting EDM primitive or enumeration types如果我可以做这项工作,我也可以使我的其他部分工作.

public class DbSetWrapper
    where C1Data : IData 
    where Entity: class
{

    public DbSetWrapper(C1AzureStoreRPContext context)
    {
        Data = context.Set().Cast();
    }
    public IQueryable Data { get; private set; }
}

public class C1AzureStoreRPContext : DbContext
{
    static C1AzureStoreRPContext()
    {
        Database.SetInitializer(null);
    }
    // Methods
    public C1AzureStoreRPContext(string connectionstring)
        : base(connectionstring)
    {

    }

    // Properties

    public DbSet AzureStoreSubscriptions { get; set; }
}
 public interface IAzureStoreSubscription : IData, IEntityFrameworkProvided {}
 public class AzureStoreSubscriptionWrapper : AzureStoreSubscription, IAzureStoreSubscription { }

 using (var c1 = new C1AzureStoreRPContext("opencms-sql-connection"))
 {
    var wrap = new DbSetWrapper(c1);
    Log.LogInformation("EF", string.Format("hello {0}", wrap.Data.ToList().Count));
 }

我不想将所有数据都拉到内存并进行转换,是不是没有其他解决方案?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有