如何将MVC应用程序与不同类库中的成员资格提供程序和数据模型链接在一起?

问题描述 投票:0回答:1

我有3个类库和ASP.MVC 4 Web应用程序。

  1. 库-基本数据模型(用户,角色等...)
public class User
{
  public int ID { get; set; }
  public string Comments { get; set; }....
}
  1. 库-扩展数据模型(合作伙伴,产品)-可能因不同的Web应用而异。
  2. 图书馆-成员资格提供者。

我在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

经过一番反复尝试后,找到了解决方案

随时发表评论-我不知道它的正确性。
  1. 类库
  2. 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; }
    }
    
  1. 提供者-关键是使其变得抽象
  2. 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;
}
  1. 在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;组; } ....} ...

c# asp.net-mvc entity-framework asp.net-membership libraries
1个回答
0
投票

要使用通用库获取用户权限和访问权限,您必须设计一个抽象层,供会员资格提供者使用。由于DBContext直接连接到特定的业务域,并且您想使用通用库进行访问和授权,因此需要将项目的特定对象映射到该抽象层。我可以想象这样的抽象层应允许以以下方式对实体(或表格)进行操作:

© www.soinside.com 2019 - 2024. All rights reserved.