我有 3 个类库和ASP.MVC 4
Web 应用程序。
- 库 - 基础数据模型(用户、角色等)
public class User
{
public int ID { get; set; }
public string Comments { get; set; }....
}
- 库 - 扩展数据模型(合作伙伴、产品) - 这可能因不同的 Web 应用程序而异。
- 图书馆 - 会员提供者。
我DBContext
在 MVC 应用程序中创建我的,因为只有我知道DBSet
当前应用程序需要哪个。
public class DSContext:DbContext
{
public DbSet<User> Users { get; set; }
}
我可以在 MVC 应用程序中访问和使用两个数据库中的模型(并且它可以工作),但是如何告诉使用我在 MVC 应用程序membership provider
中使用的相同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();
}
}
}
这就是魔法:)