程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 Redis 和 Entity Framework Core。错误:已经有一个与此连接关联的打开的 DataReader 必须先关闭大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 redis 和 Entity Framework Core。错误:已经有一个与此连接关联的打开的 DataReader 必须先关闭?

开发过程中遇到使用 redis 和 Entity Framework Core。错误:已经有一个与此连接关联的打开的 DataReader 必须先关闭的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 redis 和 Entity Framework Core。错误:已经有一个与此连接关联的打开的 DataReader 必须先关闭的解决方法建议,希望对你解决使用 redis 和 Entity Framework Core。错误:已经有一个与此连接关联的打开的 DataReader 必须先关闭有所启发或帮助;

我正在尝试将 redis 用于我的 API。这就是问题所在。

我正在尝试:

[httpGet]
public async Task<ActionResult<IEnumerable<Writer>>> GetAllWriters([Fromservices] IWriterRepository repository,[Fromservices] Idi@R_197_10495@butedCache cachE)
{            
    @R_197_10495@ng recordKey = "Writers_" + datetiR_180_11845@e.Now.To@R_197_10495@ng("yyyymMdd_hhmm");

    var writers = await cache.GetRecordAsync<IEnumerable<Writer>>(recordKey);

    if (writers == null)
    {
        writers = repository.GetAll();
        await cache.SetRecordAsync(recordKey,writers,TimeSpan.FromSeconds(180));                
    }
            
    return Ok(writers);
}

但我收到错误

已经有一个与此连接关联的打开的 DataReader,必须先关闭它。

我对这个错误有点困惑,因为 EF 调用可以获取我的数据,我可以将这些数据保存到 redis 并且我也“可以”从中获取数据,只需要弄清楚 SolID私人设置的问题嘿嘿。

我愿意接受建议:D。

这里是redis的实现

using System;
using System.Text.json;
using System.Threading.Tasks;
using Microsoft.Extensions.Caching.di@R_197_10495@buted;

namespace Worthix.API.Extensions
{
    public static class di@R_197_10495@butedCacheExtensions
    {
        public static async Task SetRecordAsync<T>(this Idi@R_197_10495@butedCache cache,@R_197_10495@ng recordID,T data,TimeSpan? absoluteExpireTime = null,TimeSpan? unusedExpireTime = null)
        {
            var options = new di@R_197_10495@butedCacheEntryOptions();

            options.absoluteExpirationrelativeToNow = absoluteExpireTime ?? TimeSpan.FromSeconds(60);
            options.SlIDingExpiration = unusedExpireTime;

            var JsonData = Jsonserializer.serialize(data);
            await cache.Set@R_197_10495@ngAsync(recordID,JsonData,options);
        }

        public static async Task<T> GetRecordAsync<T>(this Idi@R_197_10495@butedCache cache,@R_197_10495@ng recordID)
        {            
            var JsonData = await cache.Get@R_197_10495@ngAsync(recordID);

            if (JsonData == null)
                return default(T);

            return Jsonserializer.Deserialize<T>(JsonData);
        }
    }
}

和他的创业

public voID Configureservices(IserviceCollection services)
{
    services.AddControllers().AddNewtonsoftJson(options =>
                options.serializerSetTings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.IgnorE);

    // services.AddDbContext<DataContext>(opt => opt.UseInMemoryDatabase("database"));
    services.AddDbContext<DataContext>(opt => opt.UsesqlServer(Configuration.GetConnection@R_197_10495@ng("connection@R_197_10495@ng")));

    services.AddScoped<IWriterRepository,WriterRepository>();
    services.AddTransIEnt<IBookRepository,BookRepository>();
    services.AddTransIEnt<WriterHandler,WriterHandler>();
    services.AddTransIEnt<BookHandler,BookHandler>();            

    services.AddStackExchangeredisCache(opt =>
            {
                opt.Configuration = Configuration.GetConnection@R_197_10495@ng("connection@R_197_10495@ngredis");
                opt.Instancename = "Worthix_";
            });
}

我希望有足够的信息。

解决方法

只是更新。

我想通了。我仍然不知道为什么会发生这个错误。

我将 EF Core 查询重构为异步并且它起作用了,如果有人知道为什么会发生此错误,我会将其标记为正确答案。

[httpGet]
public async Task<ActionResult<IEnumerable<Writer>>> GetAllWriters([Fromservices] IWriterRepository repository,[Fromservices] IDi@R_197_10495@butedCache cachE)
{

    @R_197_10495@ng recordKey = "Writers_all_" + datetiR_180_11845@e.Now.To@R_197_10495@ng("yyyymMdd_hhmm");

    var writersModel = await cache.GetRecordAsync<IEnumerable<WriterModel>>(recordKey);

    if (writersModel == null)
    {
        var writers = await repository.GetAll();
        await cache.SetRecordAsync(recordKey,writers);
        return Ok(writers);
    }

    return Ok(writersModel);
}

大佬总结

以上是大佬教程为你收集整理的使用 Redis 和 Entity Framework Core。错误:已经有一个与此连接关联的打开的 DataReader 必须先关闭全部内容,希望文章能够帮你解决使用 Redis 和 Entity Framework Core。错误:已经有一个与此连接关联的打开的 DataReader 必须先关闭所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。