将现有的EntityFramework类库项目与新的ASP.NET Core 2.0 Razor Pages项目

时间:2017-10-26 13:54:08

标签: c# asp.net entity-framework

我正在设置一个新的ASP.NET Core 2.0 Razor Pages项目,我想重用一个包含我的EntityFramework模型,DBContext等的现有类库项目。

在ASP.NET Core 2.0之前,我在MCV网站项目中使用单独的EntityFramework项目的方法是:

  • 将EntityFramework项目添加到具有我的网站项目的解决方案
  • 在网站项目中添加对EntityFramework项目的引用
  • 将连接字符串从EntityFramework项目中的“app.config”文件复制到网站项目中的“web.config文件”文件。

我仍在掌握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中有一个带有此名称的连接字符串,所以显然我做错了其他事情,并且没有拾取连接字符串。

0 个答案:

没有答案