【发布时间】:2015-11-18 20:27:31
【问题描述】:
我最近重新开始了 ASP MVC 开发,对于 EF 6,我对设计逻辑有一些疑问。
我将采用以下模式: 控制器 -> 服务 -> 存储库 -> DbContext -> 数据库
我读过一些关于 UnitOfWork 模式的东西,但我总是做出类似的东西:
public abstract class BaseRepository : IDisposable
{
SiteContext Context;
public BaseRepository(SiteContext context) {
Context = context;
IsContextDisposable = false;
}
public BaseRepository() {
Context = new SiteContext();
IsContextDisposable = true;
}
}
public class ForumRepository : BaseRepository
{
}
因此,如果某个方法需要多个 repos,它可以只传递其单个 DbContext 并在以后处理它。
问题:
我的存储库是否应该使用实体框架模型(用于构建我的代码优先数据库)?或者 repo 是否应该获取它们并立即使用 Automapper 或类似的东西将 EF 模型转换为域对象?
服务的意义何在?为什么我不能直接从控制器实例化存储库?服务的职责是什么?
将实体模型转换为领域对象然后再转换为视图模型是否正常?
【问题讨论】:
-
从那时起以异步方式使用 DbContext,上层可能会认为 Repo 已完成并过早处置它 - 据我所知,这不可能发生。
-
是的,我要编辑我的帖子,因为我已经阅读了大量关于 DbContext 如何不是线程安全的文章,而且启动另一个上下文显然不是什么大问题.
-
异步和线程根本不是一回事。
-
对不起,我指的不是 C# 异步模式,我指的是多线程。
标签: c# asp.net asp.net-mvc entity-framework entity-framework-6