繁体   English   中英

数据库优先错误实体框架.NET Core

[英]Database First Error Entity Framework .NET Core

我正在将旧的类库转换为类库包。 该类库是旧项目的DAL层-我们将升级到最新的.NET。

在旧的类库中,我们首先使用edmx文件作为数据库。 在新的.NET中,对edmx的支持已经停止,但是我们仍然需要从数据库生成模型-因为数据库已经存在。

为此,我正在遵循此链接中提供的步骤: https : //docs.efproject.net/en/latest/platforms/aspnetcore/existing-db.html

因此,我要做的就是创建一个新的类库包:

在此处输入图片说明

而project.json是这样的:

{
  "version": "1.0.0-*",
  "description": "xPT.DAL Class Library",
  "authors": [ "Dawood" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",
  "frameworks": {
    "net46": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1",
        "System.Collections": "4.0.11",
        "System.Linq": "4.1.0",
        "System.Runtime": "4.1.0",
        "System.Threading": "4.0.11"
      }
    }
  },
  "dependencies": {

  }
}

现在,当我安装: Microsoft.EntityFrameworkCore.SqlServer ,如上面的链接中所述,我收到此错误:

使用此命令: Install-Package Microsoft.EntityFrameworkCore.SqlServer

在此处输入图片说明

错误列表:

在此处输入图片说明

它在这里说:

The dependency Microsoft.Extensions.Caching.Abstractions 1.0.0 in project xPT.DAL does not support framework .NETFramework,Version=v4.6

但是根据文档,此库应受4.5.1以上版本的支持: https : //docs.efproject.net/zh/latest/providers/sql-server/index.html#supported-platforms

我究竟做错了什么?

更新
看起来您仍在使用DNX。 请升级到.NET Core(以及.NET CLI),因为不再支持DNX。 您可以在此处下载.NET Core。


net46是用于桌面.NET Framework 4.6的目标框架Moniker(TMF)。 您不需要在该框架上引用诸如Microsoft.CSharpSystem.Collections包,因为默认情况下它们是完整.NET框架的一部分。 仅在定位.NET Standard版本(例如netstandard1.6时才需要这些。

删除您在net46下列出的所有依赖net46

{
  "dependencies": {
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0"
  },

  "frameworks": {
    "net46": {}
  }
}

好的,我花了大约一天的时间才弄清楚,所以在这里,我发布了我的步骤,以便让我的数据库优先在.NET Core Web App的Class Project (.NET Core)工作。

第1步-安装.NET Core

确保您使用的是.NET Core,而不是DNX (Hint: You should be able to see the .NET Core option when creating a New Project) -如果不是从此处下载

如果您在安装.NET Core时遇到问题(错误未正确安装Visual Studio 2015 Update 3之类的东西)-您可以使用以下命令运行安装程序:[ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ]-这将阻止安装执行Visual Studio Check Github问题

在此处输入图片说明

第2步-创建项目

创建一个新的ASP.NET Core Web应用程序->然后在下一个屏幕中选择Web应用程序

在此处输入图片说明

添加Class Library (.NET Core)项目

在此处输入图片说明

步骤3-安装EF套件

打开类库的project.json文件,并粘贴以下内容,然后保存文件:

{
  "version": "1.0.0-*",

  "dependencies": {
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "NETStandard.Library": "1.6.0"
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net46": {
    },
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        }
      }
    }
  }
}

这应该还原References下的包

在此处输入图片说明

- - - - - - - - 要么

您可以通过在Package Manager控制台中运行以下命令来使用Nuget Package Manager安装它们

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

注意:一次安装一个软件包-如果安装后出现错误

Microsoft.EntityFrameworkCore.Tools

然后将project.json框架部分的内容更改为此:

  "frameworks": {
    "net46": {
    },
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-*"
        }
      }
    }
  }

步骤4-建立资料库模型

现在要生成数据库,请在Package Manager Console运行以下命令(不要忘记将连接字符串更改为数据库)

Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer

这将给您有关启动项目的错误:

在此处输入图片说明

为此,您必须将添加到类库的相同引用添加到.NET Web App

因此,打开Web应用程序的project.json

dependencies项下,添加:

"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

tools下添加:

"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

进行更改后,保存文件。

这是我的project.json的样子

在此处输入图片说明

然后再次针对类库在Package Manager控制台中运行命令:

如果尚未将类库的引用添加到Web应用程序,则会出现以下错误:

在此处输入图片说明

解决您的类库向Web应用程序添加引用的问题:

在此处输入图片说明

最后

再次运行命令-在Package Manager Console

Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

这应该在类库中的“模型”文件夹下创建实体。

在此处输入图片说明

!!!!停止使用DNX !!!!

1 1/2个月前, ASP.NET Core 1.0.0已经达到RTM

自RC2以来,不支持DNX ,也不对其进行维护

您必须使用RC1或更旧的版本,因为它是DNX的最新版本。

软件包的RTM版本不适用于RTM! 卸载(ASP).NET 5工具,然后从Microsoft页面安装.NET Core SDK

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM