如何从引用的.NET Framework项目中的appsettings.json获取设置

时间:2016-12-07 14:55:29

标签: entity-framework-6 .net-core

我已经将.NET Framework 4.6.1中运行的EntityFramework 6作为项目获得了DAL。适用于其他.NET Framework项目的解决方案。现在,我将使用引用到我的ASP.NET Core WebApi(使用.NET Framework 4.6.1)的相同DAL项目,但它不起作用。例外情况说:

  

没有名为' MyEntities'的连接字符串可以在应用程序配置文件中找到。

.NET Core项目没有web.config文件,因此EF6如何将我的Core项目中的appsettings.json设置传递给引用的DAL项目?

我找到了一些示例让EF6在.NET Core项目中工作(如https://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6),但它对我没有帮助。我想这是因为dbcontext是在DAL项目中创建的。

appsettings.json

"ConnectionStrings": {
  "MyEntities": "<my connectionString>"
},

project.json

"dependencies": {
  "EntityFramework": "6.1.3",
  ...
},
...
"frameworks": {
  "net461": {
    "dependencies": {
      "DAL": {
        "target": "project"
      }
    },
    "imports": "dnxcore50"
  } 
},

2 个答案:

答案 0 :(得分:1)

嗯......我没有得到我想要的答案。所以我做了一个解决方法,我不得不在DAL项目中更改一些代码。希望它没有打破其他项目的某些功能......

在DAL项目中:
由于我首先使用EF Entity with Model,我无法改变模型。但它创建了部分类,所以我使用带参数的contstructor为MyEntity做了另一个部分类。

namespace DAL.Models
{
    public partial class MyEntities
    {
        public MyEntities(string connString) : base(connString)
        {
        }
    }
}

在DAL repo中,我创建了一个带参数的构造函数(用于.NET核心项目的注入)和私有方法。

public class UserRepository : IUserRepository
{
    private readonly string _dbContextString;

    public UserRepository(string dbContextString)
    {
        _dbContextString = dbContextString;
    }

    private MyEntities GetMyEntities()
    {
        return string.IsNullOrEmpty(_dbContextString) ? new MyEntities() : new MyEntities(_dbContextString);
    }
    ...
}

然后我从

中搜索并替换MyEntity()的使用
    using (var context = new MyEntities())
    {
        ...

    using (var context = GetMyEntities())
    {
        ...

在我的.NET核心项目中:
在Startup.cs中,我在ConfigureService中添加了一行来在我的仓库中注入connectionString。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddSingleton<IUserRepository>(new UserRepository(Configuration.GetConnectionString("MyEntities")));
    ...

Tada,现在它适用于我的新.NET核心项目,并且仍在使用其他.NET框架项目!

答案 1 :(得分:0)

您必须在所需的控制器中注入IConfiguration并将其传递给Dal项目

 //dependency inject it in required controller or service class
    IConfiguration Config 
 //this will get your connection string 
    Config.GetSection("ConnectionStrings").GetSection("MyEntities")