将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个项目。第一个真正的问题:为什么我应该或不应该这样做
你应该明确地将你的Web应用程序与你的服务和数据库层分开(所以如果你要拆分项目,你需要3个而不是2个)。但是你错过了服务层,它将负责检索和转换数据库实体到业务/领域对象,并将这些对象传递给你的Web应用程序(而不是数据库实体-需要EF)。
第二个问题:我得到一个错误的方式,我现在这样做。我可以通过从NuGet安装实体框架包来解决这个问题。但后来我又想到,我还是会把东西混在一起。然后网站就知道它使用了实体框架。
如果你的web应用程序直接访问数据上下文,那么它需要了解实体框架和ASP。NET Identity for EF,因此你得到的错误。
创建一个服务层(一个新的类库),引用数据库项目并在该服务层中添加实体框架,然后使用该层从数据库检索数据并将这些实体转换为业务对象。
传递业务对象(而不是EF实体)到您的Web应用程序。然后在您的Web应用程序中,引用Services类库。
这将是一个好的开始。