我正在使用Entity Framework在ASP.NET中构建一个MVC Web应用程序,并且我正在尝试将依赖注入添加到数据库上下文中以便于测试。我已经为应用程序db上下文实现了一个接口,如下所示:
public interface IApplicationDbContext : IDisposable
{
DbSet<RequestModel> Requests { get; set; }
DbSet<ApplicationUser> Users { get; set; }
int SaveChanges();
void MarkAsModified(RequestModel request);
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IApplicationDbContext
{
public ApplicationDbContext()
: base("MergedDb", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public DbSet<RequestModel> Requests { get; set; }
DbSet<ApplicationUser> IApplicationDbContext.Users
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public void MarkAsModified(RequestModel request)
{
Entry(request).State = EntityState.Modified;
}
}
这似乎很开心。然后我尝试在启动时启动数据库上下文以设置用户角色:
private void createRolesandUsers()
{
IApplicationDbContext db = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(db));
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
在&#34; db&#34;在roleManager和userManager行中,我收到以下错误:
参数1:无法将Project.Models.IApplicationDbContext转换为System.Data.Entity.DbContext
我对Entity Framework很陌生,不确定我错过了什么或弄错了什么。如果有人有任何想法或者可以看到我出错的地方,我将非常感谢任何帮助或建议。
答案 0 :(得分:0)
这只是发生编译错误,因为您的接口类型为IApplicationDbContext的显式声明的db变量。只需将此行更改为:
ApplicationDbContext db = new ApplicationDbContext();
或
var db = new ApplicationDbContext();
它会起作用。