我有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可以是具有属性Users的任何DbContext,该属性具有来自第一类库的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;
}DbContext继承的本地DbContext和从库中的MembershipProvider继承的本地提供程序。public class EFContext:CL.UserContext
{
}和
public class LocalMp:MP.STMembershipProvider
{
public override CL.UserContext DB
{
get
{
return new EF.Models.EFContext();
}
}
}这就产生了魔力:)
发布于 2013-01-06 12:07:20
要使用通用库进行用户权限和访问,您必须设计一个抽象层,将由您的成员资格提供者使用。由于DBContext直接连接到特定的业务域,并且您希望使用通用库进行访问和授权,所以需要将项目的特定对象映射到抽象层。我可以想象,这样的抽象层应该允许以以下方式对实体(或表)进行操作:
希望这能帮上忙。
https://stackoverflow.com/questions/14181139
复制相似问题