使用存储库模式创建多对多关系

问题描述 投票:0回答:1

我有一个类似Dish和Category的表:

    public class Dish
    {

        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        [Required]
        public decimal Price { get; set; }

        public string Description { get; set; }

        public ICollection<UserDish> UserDishes { get; set; }

        public ICollection<DishCategory> DishCategories { get; set; }


    }
    public class Category
    {

        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        public ICollection<DishCategory> DishCategories { get; set; }

    }

而且我为他们每个人和实现都有接口

    public class EFDishRepository : IDishRepository
    {
        private ApplicationDbContext _context;

        public EFDishRepository(ApplicationDbContext ctx)
        {
            _context = ctx;
        }


        public IQueryable<Dish> Dishes => _context.Dishes;


    }
    public class EFCategoryRepository : ICategoryRepository
    {
        private readonly ApplicationDbContext _context;

        public EFCategoryRepository(ApplicationDbContext ctx)
        {
            _context = ctx;
        }

        public IQueryable<Category> Categories => _context.Categories;
    }

我有流利的API映射的多对多关系。

我的问题是处理DishCategory表的最佳实践是什么?

我是否应该创建单独的存储库来处理此问题,导致从DishCategory端进行处理,感觉不对?

c# .net entity-framework repository-pattern core
1个回答
0
投票

处理DishCategory表的最佳实践是什么?

它们应该在同一个存储库中。而且您的ApplicationDbContext是一个非常好的存储库。首先,没有理由将其包装在单独的存储库类中。

如果走那条路,您将不断在存储库中添加和更改方法,以在应用程序中实现业务逻辑,并且存储库将最终充满属于存储库外部的代码,例如查询和事务。

如果要使用单个实体存储库,则应该[[至少有一种方法可以访问DbContext来访问其他实体。这是一个简单的单实体接口的想法,该接口使用C#8的新默认接口实现。

public interface IRepository<T> where T:class { public DbSet<T> Set { get { var db = (DbContext)this; return db.Set<T>(); } } public T Find(int id) { return Set.Find(id); } //. . . }
© www.soinside.com 2019 - 2024. All rights reserved.