【发布时间】:2021-10-01 04:03:01
【问题描述】:
我有一个 ASP.NET MVC 应用程序EducationalCenter,项目结构如下:
DbContext 文件是EducationalCenterContext.cs 在Data 项目中,如下所示:
public sealed class EducationalCenterContext: DbContext
{
public DbSet<Student> Students { get; set; }
public EducationalCenterContext( DbContextOptions<EducationalCenterContext> options)
: base(options)
{
Database.EnsureCreated();
}
}
而在Startup.cs文件中,ConfigureService()中的dbContext配置如下:
services.AddDbContext<EducationalCenterContext>
(options => options.UseSqlServer("Server=localhost;Database=EducationalCenterDb;Trusted_Connection=True;MultipleActiveResultSets=true"));
这是我在尝试添加迁移时通过修复错误而得到的工作版本。然而,我的 Web 应用程序对 Data 项目的项目引用对我来说似乎很糟糕。
我的第一个想法是什么:
在appsettings.json我创建了这个部分:
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=EducationalCenterDb;Trusted_Connection=True;MultipleActiveResultSets=true"
}
然后我在Common 项目中创建了AppSettings 类:
public class AppSettings
{
public string ConnectionString { get; set; }
}
然后我尝试通过 DI 在 DAL 中传递ConnectionString:
services.Configure<AppSettings>(Configuration.GetSection("ConnectionStrings"));
并创建了EducationalDbContext.cs:
public sealed class EducationalCenterContext: DbContext
{
private readonly string _connectionString;
public DbSet<Student> Students { get; set; }
public EducationalCenterContext( IOptions<AppSettings>, DbContextOptions<EducationalCenterContext> options)
: base(options)
{
_connectionString = app.Value.ConnectionString;
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
}
但是当我尝试通过 PM 控制台add-migration 时,我遇到了这个错误:
无法加载程序集“EducationalCenter.Data”。确保它被启动项目“EducationalCenter”引用
然后我添加了项目引用并遇到了下一个错误:
无法创建“EducationalCenterContext”类型的对象。有关设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728
然后我在Startup.cs 中添加了services.AddDbContext<> 并来到了我上面提到的工作版本。
所以...
- 我的 Web 应用引用数据访问项目是否正常?
- 是否可以在
Data项目中配置EF,保证DAL、BLL和web app正常分离?
【问题讨论】:
标签: c# asp.net-mvc entity-framework architecture