我有3个类库和ASP.MVC 4
Web应用程序。
public class User
{
public int ID { get; set; }
public string Comments { get; set; }....
}
我在MVC应用程序中创建我的DBContext
,因为只有在那里我知道当前应用程序需要哪个DBSet
。>>
public class DSContext:DbContext { public DbSet<User> Users { get; set; } }
我可以从MVC应用程序中的两个数据库访问和使用模型(并且可以工作,但是如何告诉
membership provider
使用与在MVC应用程序中使用的相同的DBContext
这样的东西?
var pUser = SomeDBContext.Users.Find(Username); return new MembershipUser(...Set properties from pUser...);
[
SomeDBContext
可以是具有第一类库中类型为DbContext
的属性Users
的任何User
。
经过一番反复尝试后,找到了解决方案
随时发表评论-我不知道它的正确性。public class User
{
[Required]
[Key]
public string UserName{get; set;}
public string PassWord{ get; set;}
}
public class UserContext : DbContext
{
public DbSet<User> Users { get; set; }
}
public abstract class STMembershipProvider : ExtendedMembershipProvider
并添加抽象属性
public abstract CL.UserContext DB { get; } public override bool ValidateUser(string username, string password) { User dbuser = DB.Users.Find(username); if (dbuser != null) { if (dbuser.PassWord == password) return true; } return false; }
- 在MVC应用程序中,创建从类库
DbContext
继承的本地DbContext
和从库中的MembershipProvider
继承的本地提供程序。
public class EFContext:CL.UserContext { }
和
public class LocalMp:MP.STMembershipProvider { public override CL.UserContext DB { get { return new EF.Models.EFContext(); } } }
这就是魔术:)
我有3个类库和ASP.MVC 4 Web应用程序。库-基本数据模型(用户,角色等)。公共类User {public int ID {get;组; } public string评论{get;组; } ....} ...
要使用通用库获取用户权限和访问权限,您必须设计一个抽象层,供会员资格提供者使用。由于DBContext直接连接到特定的业务域,并且您想使用通用库进行访问和授权,因此需要将项目的特定对象映射到该抽象层。我可以想象这样的抽象层应允许以以下方式对实体(或表格)进行操作: