我正在使用ASP.NET构建一个Web应用程序,我在一个解决方案中创建了两个独立的项目,其中一个是ASP.NET项目,另一个是“控制台应用程序”。称为数据层。在数据层中,我已经将它与我的本地数据库(首先是ADO.NET实体框架数据库)连接起来。
我的问题是,我希望我的DbContext类在我的ASP.NET项目中的控制器中不可访问。目前,只需使用数据层即可访问它。我的ASP.NET中有一个带有构建器类的文件夹,它们可以访问DbContext,我只希望构建器到达我的DbContext。因此,在我的控制器中,我只想使用构建器对DbContext执行某些操作。
我想要的示例:
public ActionResult Index()
{
return View(new ExampleBuilder().GetListFromDb());
}
而不是(这在我的项目中必须被禁止和无法访问):
private DbContext db = new DbContext();
public ActionResult Index()
{
return View(db.SomeModel.ToList());
}
有没有人有这方面的好解决方案?
答案 0 :(得分:3)
您可以使用以下项目结构
Web
(取决于Data.Repositories和Common)Data.Repositories
(取决于Data.Model和Common) - 在这里实现使用Data.Model中的EntityFramework上下文的存储库。Data.Model
(取决于Common) - 将您的EntityFramework上下文类放在此处,但所有模型都应该进入Common以使它们可用于所有项目。Common
- 您的EntityFramework模型以及其他需要随处访问的内容,例如:例外,工具。基本上,您的存储库方法看起来像这样:
public Common.User GetUserByEmail(string email)
{
using (var context = new Data.Model.MyContext())
{
return context.Users.FirstOrDefault(user => user.Email == email);
}
}
您的网站没有对Data.Model的引用,它将无法直接使用您的上下文类。它必须通过Repositories抽象层。