不同项目中的ASP.NET MVC,EntityFramework,DBContext,存储库

teh0wner

我目前正在研究ASP.NET MVC 5项目,并且正在尝试完善该项目的体系结构。使它尽可能干净,方便人们将来使用。

首先,我将EntityFramework模型(包括IdentityUser和AccountViewModel)移到同一解决方案中的Class库项目中。目前,主要的MVC项目已引用了这一点。

但是,我现在正在考虑创建一个新的数据访问层项目,该项目将保存DbContext(或DbContext,如果我决定使用多个DbContext),以及数据访问层。进行此操作的最佳方法是什么?

该DAL项目将引用Model项目,而主MVC项目将仅引用DAL项目。

看完这篇文章我想知道使用EntityFramework时是否确实过时了存储库模式。

所以我的两个主要问题是:

1)将DAL导出到单独项目中的最佳方法是什么

2)什么是使用EF访问数据库内容的最佳方法

年龄

您的问题很广泛。例如,“使用EF访问数据库内容的最佳方法”是什么意思?在性能方面最好的方法?

我将尝试通过给出一个我更喜欢的选项(我主要使用一些变体)来回答,该选项使用存储库模式。如果您将EF集直接用作存储库,您可能会认为您不需要存储库模式,但是我想将它们包装在自己的存储库中。

由于我无法通过最佳方式理解您的意思,因此我将给出适合于典型Web项目的个人偏好。

我不会发布所有代码以使其完全起作用,但是您应该对所发生的事情有个清楚的了解。

设置(4个项目):

UI ----------> Domain.Logic(带有Domain.Models)----------------->数据(保留EF上下文)。

数据:

public partial class EFContextContainer : DbContext 
enter code here
public EFContextContainer ()
        : base("name=EFContextContainer")
    {
    }

public DbSet<IdentityUser> IdentityUsers { get;set; } 

使用包装器返回上下文:

public static class Database
{
    public static EFContextContainerGetContext()
    {
        return new EFContextContainer();
    }

}

您可能具有如下的存储库设置:

接口:

public interface IRepository<T> where T : class
{
    IQueryable<T> GetAll();
    T GetById(Guid id);
    void Add(T entity);
    void Update(T entity);
    void Delete(T entity);
    void Delete(Guid id);
}

实现(为简洁起见,仅实现了Add(T实体)):

public class EFRepository<T> : IRepository<T>, IDisposable where T : class
{
    public EFRepository(DbContext dbContext)
    {
        if (dbContext == null)
            throw new ArgumentNullException("dbContext");
        DbContext = dbContext;
        DbSet = DbContext.Set<T>();

    }

    protected DbContext DbContext { get; set; }

    protected DbSet<T> DbSet { get; set; }

    public virtual void Add(T entity)
    {
        DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
        if (dbEntityEntry.State != EntityState.Detached)
        {
            dbEntityEntry.State = EntityState.Added;
        }
        else
        {
            DbSet.Add(entity);
        }
    }

public void Dispose()
    {
        DbContext.Dispose();
    }

}

域:

Domain.Logic(IdentityUserManager将是Domain.Models中的类):

public class IdentityUserManager
{
    public void Add(IdentityUser idUser)
    {
        using(var idUserRepository = new EFRepository<IdentityUser>(Database.GetContext())
        {
            idUserRepository.Add(idUser);
        }
    }
}

用户界面:

[HttpPost]
public ActionResult Post(UserViewModel model)
{
    UserIdentity user = MapUser(model);
    var userManager = new IdentityUserManager();
    userManager.Add(user);

    return View(new UserViewModel());
}

(这不是在Visual Studio中全部组成的,因此可以避免任何拼写错误。)

诚然,此代码中可以包含更多抽象,但是在此处写下整个解决方案是荒谬的。例如,您也可以使用工作单元模式,该模式与存储库模式一起使用非常好。因此,请阅读此示例,而不是有关如何实施此设置的完整指南。可以设置比本示例干净得多的东西。

为了深入了解其中一些模式的实现,我敦促您浏览John Papa在Plural Sight上开设的Single Page Apps课程他出色地解释了这些模式的好处以及如何实现它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

asp.net mvc身份2运行不同项目的两个实例

来自分类Dev

如何在n层存储库模式中共享DbCOntext。ASP .NET MVC

来自分类Dev

ASP.NET 在 mvc 6 项目中

来自分类Dev

Asp.net身份DbContext /存储库问题

来自分类Dev

如何使用Storage Transfer Service跨不同项目中的存储桶复制数据?

来自分类Dev

如何读取位于不同项目中的类库中的配置?

来自分类Dev

如何读取位于不同项目中的类库中的配置?

来自分类Dev

是否可以从ASP.NET Core MVC项目中引用.net Framework 4.7.2类库?

来自分类Dev

如何从ASP.NET MVC项目引用ac#库项目中的javascript文件?

来自分类Dev

在多个项目中使用Asp.net MVC身份

来自分类Dev

在ASP.NET MVC项目中使用WebControl

来自分类Dev

利与弊在asp.net MVC中的项目中传递数据

来自分类Dev

不同数据库的不同项目?

来自分类Dev

如何将ApplicationDbContext迁移到ASP.NET MVC EF代码优先项目中的现有DbContext?

来自分类Dev

如何在另一个ASP.NET MVC项目中运行ASP.NET MVC项目

来自分类Dev

无法在ASP.NET Core项目中添加对.NET Core类库的引用

来自分类Dev

如何在ASP Net Core项目中添加类库项目的引用

来自分类Dev

同一解决方案中属于不同项目的页面之间的ASP.NET重定向

来自分类Dev

同一解决方案中属于不同项目的页面之间的ASP.NET重定向

来自分类Dev

在ASP NET MVC 6项目中使用System.Net.Mail

来自分类Dev

如何在ASP.NET MVC项目中使用.NET的GroupDocs Viewer?

来自分类Dev

Xamarin项目中SQLite-Net的通用存储库

来自分类Dev

ASP.Net Core MVC存储库模式意外处置

来自分类Dev

在asp.net mvc 5中实现存储库

来自分类Dev

在asp.net核心中无法从另一个项目中看到DbContext

来自分类Dev

没有存储库模式的ASP.Net MVC和实体框架项目体系结构

来自分类Dev

我应该在ASP.NET-MVC 5项目中的哪个位置存储WebAPI控制器?

来自分类Dev

几个项目的几个DbContext。ASP.NET MVC EF

来自分类Dev

MVC项目中的ASP.NET MVC4数据上下文类下拉列表

Related 相关文章

  1. 1

    asp.net mvc身份2运行不同项目的两个实例

  2. 2

    如何在n层存储库模式中共享DbCOntext。ASP .NET MVC

  3. 3

    ASP.NET 在 mvc 6 项目中

  4. 4

    Asp.net身份DbContext /存储库问题

  5. 5

    如何使用Storage Transfer Service跨不同项目中的存储桶复制数据?

  6. 6

    如何读取位于不同项目中的类库中的配置?

  7. 7

    如何读取位于不同项目中的类库中的配置?

  8. 8

    是否可以从ASP.NET Core MVC项目中引用.net Framework 4.7.2类库?

  9. 9

    如何从ASP.NET MVC项目引用ac#库项目中的javascript文件?

  10. 10

    在多个项目中使用Asp.net MVC身份

  11. 11

    在ASP.NET MVC项目中使用WebControl

  12. 12

    利与弊在asp.net MVC中的项目中传递数据

  13. 13

    不同数据库的不同项目?

  14. 14

    如何将ApplicationDbContext迁移到ASP.NET MVC EF代码优先项目中的现有DbContext?

  15. 15

    如何在另一个ASP.NET MVC项目中运行ASP.NET MVC项目

  16. 16

    无法在ASP.NET Core项目中添加对.NET Core类库的引用

  17. 17

    如何在ASP Net Core项目中添加类库项目的引用

  18. 18

    同一解决方案中属于不同项目的页面之间的ASP.NET重定向

  19. 19

    同一解决方案中属于不同项目的页面之间的ASP.NET重定向

  20. 20

    在ASP NET MVC 6项目中使用System.Net.Mail

  21. 21

    如何在ASP.NET MVC项目中使用.NET的GroupDocs Viewer?

  22. 22

    Xamarin项目中SQLite-Net的通用存储库

  23. 23

    ASP.Net Core MVC存储库模式意外处置

  24. 24

    在asp.net mvc 5中实现存储库

  25. 25

    在asp.net核心中无法从另一个项目中看到DbContext

  26. 26

    没有存储库模式的ASP.Net MVC和实体框架项目体系结构

  27. 27

    我应该在ASP.NET-MVC 5项目中的哪个位置存储WebAPI控制器?

  28. 28

    几个项目的几个DbContext。ASP.NET MVC EF

  29. 29

    MVC项目中的ASP.NET MVC4数据上下文类下拉列表

热门标签

归档