gpt4 book ai didi

c# - 在存储库模式中按 ID 过滤是不好的做法吗

转载 作者:太空狗 更新时间:2023-10-29 20:30:59 27 4
gpt4 key购买 nike

我正在使用 ASP.NET MVC4Entity Framework 5

基本上每个 Controller 操作结果都通过登录用户的公司 ID 过滤数据库结果。我刚刚开始实现存储库模式以返回模型,而不是直接从 Controller 中过滤 DbContext。 (将companyID传入repository来过滤methods的结果)

我有一种奇怪的感觉,认为这样做是不好的做法,但一直找不到关于这个主题的任何信息。我将在下面插入我当前代码的基本版本,我将不胜感激任何关于它是否是不好的做法以及为什么是这样的信息。

IBookingSystemRepository.cs

public interface IBookingSystemRepository : IDisposable
{
IEnumerable<Appointment> GetAppointments();
IEnumerable<Appointment> GetAppointments(bool includeDeleted);
IEnumerable<Client> GetClients();
IEnumerable<Client> 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<Appointment> GetAppointments()
{ return GetAppointments(false); }

public IEnumerable<Appointment> 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<Client> GetClients()
{ return GetClients(false); }

public IEnumerable<Client> 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());
}
}

提前感谢您的协助:)

最佳答案

这是一个 Multi-Tenancy 应用程序。需要进行过滤以保持每个公司的数据独立。您的方法是合理的;如果可能,提供一个已经过滤的上下文,而不是在下游存储库方法中单独过滤。

关于c# - 在存储库模式中按 ID 过滤是不好的做法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17151192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com