我认为将网站(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();
}
}
答案 0 :(得分:1)
将asp.net Identity分成2个项目。第一个真正的问题:我为什么要或不应该这样做。
您绝对应该将Web应用程序与服务和数据库层分开(因此,如果您要拆分项目,则需要3个而不是2个)。但是你缺少服务层,它负责检索数据库实体并将其转换为业务/域对象,并将这些对象传递给Web应用程序(而不是数据库实体 - 需要EF)。
第二个问题:我现在的方式出错了。我可以通过从NuGet安装实体框架包来解决它。但后来我有了这个想法,我仍然会混合东西。然后该网站知道它使用实体框架。
如果您的Web应用程序直接访问数据上下文,那么它需要了解有关EF的实体框架和ASP.NET标识,因此您会收到错误。
创建一个服务层(一个新的类库),引用您的数据库项目并在该服务层中添加Entity Framework,然后使用该层从数据库中检索数据并将这些实体转换为业务对象。
将业务对象(而不是EF实体)传递给Web应用程序。然后在Web应用程序中,引用Services类库。
这将是一个良好的开端。