【发布时间】:2019-03-04 14:33:34
【问题描述】:
我有这两个项目 App.ClassLibrary 和 App.Data
我按照本教程 https://garywoodfine.com/using-ef-core-in-a-separate-class-library-project/ 将我的迁移和模型移动到 App.ClassLibrary。其中一个步骤是在类库中创建一个 ApplicationDbContext:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
public DbSet<Users> Users { get; set; }
public DbSet<UserRoles> UserRoles { get; set; }
public DbSet<Applications> Applications { get; set; }
public DbSet<Roles> Roles { get; set; }
public DbSet<EventLogs> EventLogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema(schema: DatabaseGlobals.SchemaName);
modelBuilder.Entity<Users>();
modelBuilder.Entity<UserRoles>();
modelBuilder.Entity<Applications>();
modelBuilder.Entity<Roles>();
modelBuilder.Entity<EventLogs>();
base.OnModelCreating(modelBuilder);
}
public override int SaveChanges()
{
Audit();
return base.SaveChanges();
}
public async Task<int> SaveChangesAsync()
{
Audit();
return await base.SaveChangesAsync();
}
private void Audit()
{
var entries = ChangeTracker.Entries().Where(x => x.Entity is Users && (x.State == EntityState.Added || x.State == EntityState.Modified));
foreach (var entry in entries)
{
if (entry.State == EntityState.Added)
{
((Users)entry.Entity).CreatedOn = DateTime.UtcNow;
}
((Users)entry.Entity).UpdatedOn = DateTime.UtcNow;
}
}
}
在 App.Data 中,我试图引用 ApplicationDbContext 但到目前为止这不起作用
private ApplicationDbContext dbContext = new ApplicationDbContext();
我曾经在 ASP.NET MVC 5 中有一个类似的项目,其 ApplicationDBContext 如下所示:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public virtual DbSet<AspNetUsersExtendedDetails> AspNetUsersExtendedDetails { get; set; }
public virtual DbSet<AspNetApplications> AspNetApplications { get; set; }
public virtual DbSet<AspNetEventLogs> AspNetEventLogs { get; set; }
public virtual DbSet<AspNetRolesExtendedDetails> AspNetRolesExtendedDetails { get; set; }
public virtual DbSet<AspNetUserRolesExtendedDetails> AspNetUserRolesExtendedDetails { get; set; }
public virtual DbSet<AspNetUserAccessTokens> AspNetUserAccessTokens { get; set; }
public ApplicationDbContext() : base("ManagementStudio")
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
我可以使用
private ApplicationDbContext dbContext = new ApplicationDbContext();
没有任何问题,但现在我猜是因为不同的版本和框架无法正常工作。不知道我能做些什么来获取 dbcontext。
编辑:
这是我在 .Net Core 2.1 应用程序中遇到的错误
没有给出与“ApplicationDbContext.ApplicationDbContext(DbContextOptions)”所需的形参“options”相对应的参数
【问题讨论】:
-
为什么不起作用?你有错误吗?什么错误? BTW ASP.NET Core 广泛使用依赖注入,并且上下文是 injected 的。你不应该有这样的私有字段。 ASP.NET Core 知道注入的上下文并在请求结束时关闭它们。它不知道您的
dbContext字段 -
没有给出与'ApplicationDbContext.ApplicationDbContext(DbContextOptions
)'的所需形参'options'相对应的参数这是错误 -
我不确定应该在 app.data 声明中插入哪些参数
-
一个
options参数。这就是为什么您不应该尝试创建这样的存储库。检查Configuring a DbContext。它显示了如何在服务配置部分配置上下文选项。 ASP.NET Core 将使用该信息来构造上下文并将其注入到您的控制器中 -
对不起,我很困惑。我现在正在看指南。在这种情况下,我的 blog.db 会是什么?
标签: c# asp.net asp.net-mvc asp.net-core