我已经将.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"
}
},
答案 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")