在存储库模式中按ID过滤是不好的做法
我正在使用ASP.NET MVC4和Entity Framework 5 。
基本上每个控制器操作结果都按登录的用户公司ID过滤db结果 。 我刚刚开始实现一个存储库模式来返回模型,而不是直接从控制器中过滤DbContext。 (将companyID传递到存储库以过滤方法的结果)
我有一种有趣的感觉,这样做是不好的做法,但一直无法找到有关该主题的任何信息。 我将在下面插入我当前代码的基本版本,我将不胜感激任何关于它是否是不良做法的信息,以及为什么如此。
IBookingSystemRepository.cs
public interface IBookingSystemRepository : IDisposable { IEnumerable GetAppointments(); IEnumerable GetAppointments(bool includeDeleted); IEnumerable GetClients(); IEnumerable GetClients(bool includeDeleted); void Save(); }
BookingSystemRepository.cs
public class BookingSystemRepository : IBookingSystemRepository { private BookingSystemEntities db; int CompanyID; public BookingSystemRepository(BookingSystemEntities context, int companyID) { this.db = context; this.CompanyID = companyID; } public IEnumerable GetAppointments() { return GetAppointments(false); } public IEnumerable GetAppointments(bool includeDeleted) { return includeDeleted ? db.Appointments.Where(a => a.User.CompanyID == CompanyID) : db.Appointments.Where(a => a.User.CompanyID == CompanyID && a.Deleted.HasValue); } public IEnumerable GetClients() { return GetClients(false); } public IEnumerable GetClients(bool includeDeleted) { return includeDeleted ? db.Clients.Where(c => c.CompanyID == CompanyID) : db.Clients.Where(c => c.CompanyID == CompanyID && c.Deleted.HasValue); } public void Save() { db.SaveChanges(); } public void Dispose() { if (db != null) db.Dispose(); } }
TestController.cs
public class TestController : Controller { private BookingSystemEntities db = new BookingSystemEntities(); public ActionResult AppointmentsList() { var user = db.Users.Single(u => u.Email == User.Identity.Name); IBookingSystemRepository rep = new BookingSystemRepository(db, user.CompanyID); return View(rep.GetAppointments()); } }
谢谢你提前帮助:)
这是一个多租户应用程序。 需要过滤以保持每个公司的数据分开。 你的方法很合理; 如果可能,提供已经过滤的上下文,而不是单独过滤下游存储库方法。