我有一个使用Asp.Net MVC Core 2.1构建的具有3层(演示文稿-业务-数据)的应用程序
在我的Presentation层中,我有一个ApplicationDbContext类,该类实例化并填充测试数据库:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
SeedData(builder);
}
// Database Tables
public DbSet<Customer> Customers { get; set; }
public DbSet<Ingredient> Ingredients { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
public DbSet<Pizza> Pizzas { get; set; }
public DbSet<PizzaIngredient> PizzaIngredients { get; set; }
// Fill Database with sample data
private void SeedData(ModelBuilder builder)
{
// Seed data
}
所说的类被注入到Startup.cs类中(也在表示层中):
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest);
我现在想在数据层中使用此ApplicationDbContext类来使代码分开。我最好怎么做?通过构造函数注入类似乎不起作用(严重性代码说明项目文件行抑制状态 错误CS0246找不到类型或名称空间名称'ApplicationDbContext'(您是否缺少using指令或程序集引用?)
namespace PizzaShop.Data.Repositories
{
public class PizzaRepo : IPizzaRepo
{
private readonly ApplicationDbContext _context;
public PizzaRepo(ApplicationDbContext context)
{
_context = context;
}
public async Task<int> AddEntityAsync(Pizza entity)
{
_context.Pizzas.Add(entity);
return await _context.SaveChangesAsync();
}
//...
}
}
答案 0 :(得分:5)
如果您想将所有与数据库相关的内容保留在PizzaShop.Data项目中,则您的ApplicationDbContext
不属于您的Web项目。它属于您的PizzaShop.Data项目。
然后,您从Web项目中引用PizzaShop.Data项目。
答案 1 :(得分:2)
您的ApplicationDbContext必须位于DataLayer中。
引用从下至上,即来自Presentation Layer References Business Layer References Data Layer
。如果您尝试在数据层中引用表示层,则会出现交叉引用问题。 (甚至没有意义)。
因此,将您的ApplicationDbContext移动到它所属的位置,即数据层,所有内容都将被整理:)