大佬教程收集整理的这篇文章主要介绍了使用 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,请注明来意。