c# – 在存储库模式中按ID过滤是不好的做法
发布时间:2020-12-15 08:02:40 所属栏目:百科 来源:网络整理
导读:我正在使用ASP.NET MVC4和Entity Framework 5. 基本上每个控制器操作结果都按登录的用户公司ID过滤数据库结果.我刚刚开始实现一个存储库模式来返回模型,而不是直接从控制器中过滤DbContext. (将companyID传递到存储库以过滤方法的结果) 我有一种有趣的感觉,
|
我正在使用ASP.NET MVC4和Entity Framework 5.
基本上每个控制器操作结果都按登录的用户公司ID过滤数据库结果.我刚刚开始实现一个存储库模式来返回模型,而不是直接从控制器中过滤DbContext. (将companyID传递到存储库以过滤方法的结果) 我有一种有趣的感觉,这样做是不好的做法,但一直无法找到有关该主题的任何信息.我将在下面插入我当前代码的基本版本,我将不胜感激任何关于它是否是不良做法的信息,以及为什么如此. 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());
}
}
谢谢你提前帮助:) 解决方法
这是一个多租户应用程序.需要过滤以保持每个公司的数据分开.你的方法很合理;如果可能,提供已经过滤的上下文,而不是单独过滤下游存储库方法.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
