[英]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.CSharp
和System.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)
工作。
确保您使用的是.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问题
创建一个新的ASP.NET Core Web应用程序->然后在下一个屏幕中选择Web应用程序
添加Class Library (.NET Core)
项目
打开类库的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-*"
}
}
}
}
现在要生成数据库,请在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
这应该在类库中的“模型”文件夹下创建实体。
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.