【发布时间】:2015-10-22 21:58:01
【问题描述】:
根据here 提到的答案,我知道我应该将业务逻辑放在模型本身中,而在我的程序中,我直接在控制器的操作中使用 EF,例如从直接数据库我正在做以下事情:
public ActionResult CarList()
{
using(var _db = new CarRentEntities())
{
var result = _db.Cars.Where(m=>m.Active);
return View(result);
}
}
如果我在控制器或模型中使用上述代码,对我的网站性能有什么影响?
我应该使用哪种方法?例如,如果我想与一个团队合作,是否有我应该遵循的标准来分隔代码,请指教
对于使用存储库模式:我读到我们不应该使用如果提到的例子 here ,我将复制一些提到的内容:
不将存储库模式与实体一起使用的唯一最佳理由 框架?实体框架已经实现了存储库模式。 DbContext 是您的 UoW(工作单元),每个 DbSet 都是存储库。 在此之上实现另一层不仅是多余的,而且 使维护更加困难。
如果我的数据库包含以下表格:Manufacturers、Cars、Rent、Clients,则租金等级为在 Clients 和 Cars 之间具有 2 个外键并包含其他详细字段的表。
如何处理需要从 2 个不同的存储库 Cars 和 Clients 获取数据以根据用户输入的搜索条件显示租赁网格的 Rent 对象,如果我将使用存储库 Cars 和 Clients ,它们有自己的自己的 dbContext,BOOM我的脑袋看不懂这个技巧,请指教
【问题讨论】:
-
这基本上是一个分层的关注点。这实际上与性能无关,而与可维护性有关。你的情况:如果你的数据层发生变化,你的 ui 层可能会出现问题。除此之外:将所有数据从数据层发送到 ui 可能会导致安全问题。您可能正在某处使用隐藏字段作为 ID,可以非常轻松地对其进行操作 ;-)
-
你可以阅读这篇关于工厂模式的文章,在下面的答案中提到:oodesign.com/factory-pattern.html,只需创建一个层,你将放置所有将使用 EF 和模型作为容器的方法,并且很容易您可以按照@PhilipH 提到的内容进行操作,这样,您的模型将保持干净,您的控制器将变薄,您的代码将更易于维护
标签: c# entity-framework model-view-controller