以下摘自Getting Started with ASP.NET Core and Entity Framework 6:
“在ASP.NET Core 1.0中使用Entity Framework 6的推荐方法 应用程序是将EF6上下文和模型类放在一个类中 以完整为目标的库项目(.csproj项目文件) 框架。从ASP.NET Core添加对类库的引用 项目。 “
我的目标:是在n层解决方案中并排实施EntityFramework 6和EntityFramework Core。
解决方案:
并排实施EF 6和EF Core的原因是:
我可以成功地将迁移添加到ASP.NET Core Web Application,如下所示:
PM> EntityFrameworkCore\Add-Migration InitialCreate
但是,在尝试将迁移添加到Windows类库时出现异常:
PM> EntityFramework\Add-Migration InitialCreate
使用“2”参数调用“SetData”的异常:“类型 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' 在程序集'Microsoft.VisualStudio.ProjectSystem.VS.Implementation中, Version = 14.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'是 没有标记为可序列化。“在 C:\ SRC \ Hcs.NetCore \包\ EntityFramework.6.1.3 \ TOOLS \ EntityFramework.psm1:720 焦炭:5 + $ domain.SetData('startUpProject',$ startUpProject) ...
如果我卸载ASP.NET Core Web Application,那么我可以通过以下步骤成功将EF6迁移添加到Windows类库中:
PM> EntityFramework\enable-migrations
PM> EntityFramework\add-migration InitialCreate
现在我在两个项目中都进行了初始迁移。
但是,当我运行ASP.NET核心Web应用程序时,我得到了几个运行时异常:
如果我在System.Data.Entity.DbContext的自定义实现中有无参数构造函数,那么我得到以下运行时异常:
System.Data.SqlClient.SqlException未被用户代码处理...
消息=发生与网络相关或特定于实例的错误 建立与SQL Server的连接。找不到服务器或 无法访问。验证实例名称是否正确 SQL Server配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 查找服务器/实例时出错 指定)......
通过删除默认构造函数来解决这个问题。
当我尝试注册用户时,抛出了以下异常:
问:我是否走在正确的轨道上?这现在只是一个SQL Server身份验证问题吗?或者,还涉及其他问题吗?System.Data.SqlClient.SqlException(0x80131904):无法打开数据库 登录请求“xxx”。登录失败。用户登录失败 YYY \ ZZZ”。在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity,SqlConnectionString connectionOptions,SqlCredential 凭证,Object providerInfo,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData, DbConnectionPool池,String accessToken,Boolean
答案 0 :(得分:1)
EF6命令不知道如何使用ASP.NET核心项目(它们在编写时并不存在)。在运行EF6命令之前,您可能必须卸载这些项目。
您也可以明确指定-StartupProject
作为解决问题的EF6项目。
答案 1 :(得分:1)
可以通过在以下命令中传递“Exception calling "SetData" with "2" argument(s) exception:”
或-StartupProject
参数来解决-StartupProjectName
:
在Package Manager控制台中,将Default Project设置为包含EF6上下文的类库(在我的例子中为Dna.Net.Application.DAL.EF6)并执行:
PM> EntityFramework\enable-migrations -StartupProject Dna.Net.App.DAL.EF6
PM> EntityFramework\add-migration InitialCreate -StartupProjectName Dna.Net.App.DAL.EF6
在设计时,在保存新用户帐户或时,点击 “System.Data.SqlClient.SqlException (0x80131904): Cannot open database "xxx” requested by the login. The login failed.”
按钮可以在运行时解决[Apply Migrations]
例外问题。时间执行 Update-Database
,如下所示:
在Package Manager控制台中,将Default Project设置为包含EF6上下文的类库并执行:
PM> EntityFramework\Update-Database -StartupProject Dna.Net.Application.DAL.EF6
在程序包管理器控制台中,将“默认项目”设置为包含EF Core上下文的类库,然后执行:
PM> EntityFrameworkCore\Update-Database
此时,我可以使用Server Explorer或SQL Server Object Explorer检查数据库。
Update-Database
命令为EFCore和EF6上下文创建了唯一的数据库。
此解决方案遵循Getting Started with ASP.NET Core and Entity Framework 6的示例应用程序部分中包含的准则,但有以下例外:
IDbContextFactory
。现在我可以成功执行以下测试: