我正在设置一个新的ASP.NET Core 2.0 Razor Pages项目,我想重用一个包含我的EntityFramework模型,DBContext等的现有类库项目。
在ASP.NET Core 2.0之前,我在MCV网站项目中使用单独的EntityFramework项目的方法是:
我仍在掌握ASP.NET Core 2,似乎这种方法不再适用。 “web.config”现在是“appsettings.json”,它似乎也需要对“startup.cs”文件进行更改。
我尝试了以下方法(基于此博文: http://jakeydocs.readthedocs.io/en/latest/data/entity-framework-6.html)
我将EntityFramework项目中的连接字符串复制到“appsettings.json”中:
“ConnectionStrings”:{
“BjornsonEntities”:“metadata = res:// /BjornsonModel.csdl|res:// /BjornsonModel.ssdl|res://*/BjornsonModel.msl;provider=System.Data.SqlClient; provider connection string =“data source = COMPUTER_NAME; initial catalog = DB_NAME; integrated security = True; MultipleActiveResultSets = True; App = EntityFramework”“
}
我为我的EntityFramework DBContext类添加了第二个构造函数,它接受连接字符串:
public partial class BjornsonEntities : DbContext
{
public BjornsonEntities()
: base("name=BjornsonEntities")
{}
public BjornsonEntities(string nameOrConnectionString) : base("name=BjornsonEntities")
{}
}
最后我在startup.cs中将以下行添加到ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped((_) => new BjornsonEntities(Configuration["Data:DefaultConnection:ConnectionString"]));
services.AddMvc();
}
然而,当我尝试执行一些代码来从EntityFramework项目中获取数据时,例如:
var c = new BjornsonEntities();
然后在第一个DBContext构造函数
中执行失败 public partial class BjornsonEntities : DbContext
{
public BjornsonEntities()
: base("name=BjornsonEntities")
{}
我收到以下错误消息: 'System.Data.Entity.Internal.AppConfig'的类型初始值设定项引发了异常。 FileNotFoundException:无法加载文件或程序集'System.Configuration.ConfigurationManager,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'。
对此出现问题的任何建议?更具体地说,在一个单独的项目中使用现有EF项目(不是EF Core)的最佳方法是什么?是否有一个等效的,简单的三步法,就像我之前描述的那样(适用于非ASP-NET-Core项目......)?
更新
最初,Web应用程序项目设置为.NET Core 2.0项目,而不是.NET Framework。当消费的ASP.NET Core Web应用程序项目设置为.NET Framework项目时,上面提到的DBContext初始化运行。但是,当使用DBContext尝试LINQ查询时,例如下面的
var c = new BjornsonEntities();
var result = c.PersonEvaluationResponses
.Where(p => p.PersonEvaluation.ProjectID == 14)
.Select(p => p).ToList();
我收到一条错误消息“在应用程序配置文件中找不到名为'BjornsonEntities'的连接字符串”。在appsettings.json中有一个带有此名称的连接字符串,所以显然我做错了其他事情,并且没有拾取连接字符串。