将asp.net Identity拆分为2个项目(网站和数据)

本文关键字:网站 数据 项目 2个 net asp Identity 拆分 | 更新日期: 2023-09-27 18:16:42

我得到的想法,这将是很好的拆分网站(mvc)部分和数据部分分为2个不同的项目。我还想为每个请求使用上下文(如果可能的话,在自己的上下文中)。

第一个真正的问题:为什么我应该或不应该这样做。

第二个问题:我得到一个错误的方式,我现在这样做。我可以通过从NuGet安装实体框架包来解决这个问题。但后来我又想到,我还是会把东西混在一起。然后网站就知道它使用了实体框架。

Error: The type 'Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.AspNet.Identity.EntityFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

代码:

public static Login.Data.ApplicationUserManager CreateApplicationUserManager(IdentityFactoryOptions<Login.Data.ApplicationUserManager> options, IOwinContext context)
{
  Login.Data.ApplicationUserManager manager = new Login.Data.ApplicationUserManager(context.Get<AppContext>());      
  return manager;
}

和AppContext类:

public class AppContext : IdentityDbContext<ApplicationUser>, IDisposable
  {
    public AppContext()
      : base("MemberContext")
    {
    }
    public static AppContext CreateAppContext()
    {
      return new AppContext();
    }
  }

将asp.net Identity拆分为2个项目(网站和数据)

将asp.net Identity拆分为2个项目。第一个真正的问题:为什么我应该或不应该这样做

你应该明确地将你的Web应用程序与你的服务和数据库层分开(所以如果你要拆分项目,你需要3个而不是2个)。但是你错过了服务层,它将负责检索和转换数据库实体到业务/领域对象,并将这些对象传递给你的Web应用程序(而不是数据库实体-需要EF)。

第二个问题:我得到一个错误的方式,我现在这样做。我可以通过从NuGet安装实体框架包来解决这个问题。但后来我又想到,我还是会把东西混在一起。然后网站就知道它使用了实体框架。

如果你的web应用程序直接访问数据上下文,那么它需要了解实体框架和ASP。NET Identity for EF,因此你得到的错误。

创建一个服务层(一个新的类库),引用数据库项目并在该服务层中添加实体框架,然后使用该层从数据库检索数据并将这些实体转换为业务对象。

传递业务对象(而不是EF实体)到您的Web应用程序。然后在您的Web应用程序中,引用Services类库。

这将是一个好的开始。