Hi everyone,我有Asp.使用实体框架Core 6.0和Postgresql作为数据库的Net Core Web API项目

我配置了实体及其关系.一切都很好,但通用存储库设计模式中只有一个问题

如果我只使用context.Products.ToList(),它就工作得很好.但每当我将其与通用存储库设计模式一起使用时.我出错了.但有一件有趣的事.无论何时,只要我使用断点10秒或更长时间,并且在10秒后保持断点,都不会出现错误.一切都很完美.是否存在异步问题,我从未使用过它?

Error enter image description here

Newtonsoft.Json.JsonSerializationException:从获取值时出错

---&燃气轮机;系统InvalidOperationException:为警告生成错误

public class EfEntityRepositoryBase<TEntity, TContext> : IEntityRepository<TEntity>
where TEntity : class, IEntity, new()
where TContext : DbContext, new()
{
    public TEntity Add(TEntity entity)
    {
        using (TContext context = new TContext())
        {
            var addedEntity = context.Entry(entity);
            addedEntity.State = EntityState.Added;
            context.SaveChanges();
            return addedEntity.Entity;
        }
    }

    

    public void Delete(TEntity entity)
    {
        using (TContext context = new TContext())
        {
            var deletedEntity = context.Entry(entity);
            deletedEntity.State = EntityState.Deleted;
            context.SaveChanges();
        }
    }

    public TEntity Get(Expression<Func<TEntity, bool>> filter)
    {
        using (TContext context = new TContext())
        {
            var result = context.Set<TEntity>().SingleOrDefault(filter);
            return result;
        }
    }

    public List<TEntity> GetAll(Expression<Func<TEntity, bool>> filter = null)
    {
        using (TContext context = new TContext())
        {
    
         var result = filter == null
          ? context.Set<TEntity>().ToList()
          : context.Set<TEntity>().Where(filter).ToList();
          return result;
        }
    }
}

}

My Salon Entity

public class Salon : IEntity
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }

    public string SalonNumber { get; set; }

    public virtual List<Seat> Seats { get; set; }

    public virtual List<Ticket> Tickets { get; set; }
}

My Seat Entity

    public class Seat : IEntity
    {
        [Key]
        public int Id { get; set; }
    
        public int SeatNumber { get; set; }
    
        public int SalonId { get; set; }
        public virtual Salon Salon { get; set; }
    }

 

MyDbContext

public class AppDbContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseLazyLoadingProxies().ConfigureWarnings(warnings => warnings.Ignore(CoreEventId.DetachedLazyLoadingWarning))
            .UseNpgsql("Server=localhost;Database=BiletsgoDB;Port=5432;Username=postgres;Password=123456");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Ticket>().HasOne(t => t.Category).WithMany(b => b.Tickets).HasForeignKey(t => t.CategoryId);
            modelBuilder.Entity<Ticket>().HasOne(t => t.Salon).WithMany(b => b.Tickets).HasForeignKey(t => t.SalonId);
            modelBuilder.Entity<Seat>().HasOne(t => t.Salon).WithMany(b => b.Seats).HasForeignKey(t => t.SalonId);
            modelBuilder.Entity<TicketFile>().HasOne(t => t.Ticket).WithMany(b => b.TicketFiles).HasForeignKey(t => t.TicketId);
        }

        public DbSet<Ticket> Tickets { get; set; }
        public DbSet<TicketFile> TicketFiles { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<Seat> Seats { get; set; }
        public DbSet<Salon> Salons { get; set; }
    }

推荐答案

I Solved the problem

参数包括我们的实体关系

 public List<TEntity> GetAll(params Expression<Func<TEntity, object>>[] including)
    {
        using (TContext context = new TContext())
        {

            var include = context.Set<TEntity>().AsQueryable();
            including.ToList().ForEach(item =>
            {
                include = include.Include(item);
            });
            return include.ToList();
        }
    }

我从业务层运行此方法

_salonDal.GetAll(t => t.Seats,t => t.Tickets)

但我意识到这样做效率不高.通用存储库库应使用基础知识实体.这是我的意见

Csharp相关问答推荐

ListaryImportProperty的默认DllImportSearchPathsProperty行为

Serilog SQL服务器接收器使用UTC作为时间戳

. NET 8 HttpClient post参数将其情况更改为camel'

AsNoTrackingWithIdentitySolutions()似乎不起作用?

使用两个不同的枚举作为Switch语句中的CASE生成唯一值

由于POST中的应用程序/JWT,出现不支持的内容类型异常

如何在C#中实现非抛出`MinBy`?

N层解决方案上的依赖注入-删除样板

Swagger没有显示int?可以为空

如何将端点(或с匹配请求并判断其路径)添加到BCL?

EF核心区分大小写的主键

数据库.Migrate在对接容器重启时失败

C#Microsoft.CodeAnalysis.CSharp.Scriiting不等待并行.对于

我应该为C#12中的主构造函数参数创建私有属性吗?

Autofac -动态实例化:手动传递构造函数

并发表更新.EF核心交易

在.Net 8 Visual Studio 2022中启用本机AOT发布时发布失败

如何更改Datagridview行标题

S,在.NET核心控制台应用程序中,AddScope和AddSingleton有什么不同?

如何在Blazor 8 RC2静态模式下以编程方式导航到另一个页面