我在处理数据库连接字符串和迁移时遇到问题.我有2个项目:
该DbContext是在域项目,所以这是我对运行迁移项目.迁移概念强制我OnConfiguring在我DbContext和其中指定数据库提供程序,例如:
protected override void OnConfiguring(DbContextOptionsBuilder builder)
{
builder.UseSqlServer("<connection string>");
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不想使用硬编码连接字符串,原因很明显,我不能使用ConfigurationManager从配置文件中读取它,因为配置文件在应用程序项目中.
ASP.NET Core项目模板随附,appsettings.json并且appsettings.Development.json默认情况下会在CreateDefaultBuilder中添加.
由于该项目DbContext是从我的ASP.NET核心项目分开(MyProject.Data),我必须执行IDesignTimeDbContextFactory,以便我的上下文像命令Add-Migration和Update-Database工作.我不想硬编码我的连接字符串,IDesignTimeDbContextFactory但在两个项目中重新使用配置.
我的解决方案很少但我想知道根据你的经验和意见最合理的是什么.
IDesignTimeDbContextFactory在我的ASP.NET核心(UI层)项目.IDesignTimeDbContextFactory在我的MyProject.Data项目中实现,并移动appsettings.json到configuration项目之间共享的某个根目录或(位于根目录)目录.database.json将其放在我的.sln文件旁边.我该如何分享?
编辑:
这里有类似的问题和答案:数据层中的appsettings.json与实体框架核心的ConnectionString,但它没有回答我的问题.根本没有关于数据层的任何内容.我不想重新使用逻辑来添加db上下文.我想在两个项目中重用连接字符串,以避免重复连接字符串.
我典型的.NET 4.5X Web应用程序结构至少包含3层:Web项目(.NET Web应用程序),域/业务逻辑项目(类库)和数据访问项目(类库).Web项目引用业务层,业务层引用数据访问层.
我喜欢这种方法,因为我的web项目没有对数据访问项目的引用(它必须首先通过域/业务逻辑层).我的Web项目不应该具有对上下文或存储库类的任何访问权限.
在3层.net 4.5.X应用程序中,我在web.config中声明连接字符串,并将DbContext的名称作为连接字符串的name属性.
在新的Dotnet Core范例中,我看到的每个示例都在Startup.cs中配置了DbContext,如下所示:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<MyApplicationContext>("myconnectionstring or reference to it");
}
Run Code Online (Sandbox Code Playgroud)
通过为启动提供一个用于dbcontext的具体类,我必须引用数据访问项目,其中定义了dbcontext.我宁愿只引用中间层,并避免引用DAL.
我的问题是:我应该如何安排我的解决方案结构,以便我可以避免从我的Web项目添加引用到我的数据访问项目?
我可以使用appsettings.json属性吗?
我可以用另一种方式添加我的实体配置吗?
点网核心有什么重要的缺点吗?
先感谢您.