2016-11-07 38 views
1

下面是從Getting Started with ASP.NET Core and Entity Framework 6的摘錄:工具兩者的EntityFramework 6和的EntityFramework核心並排的部分,在n層溶液

"The recommended way to use Entity Framework 6 in an ASP.NET Core 1.0 application is to put the EF6 context and model classes in a class library project (.csproj project file) that targets the full framework. Add a reference to the class library from the ASP.NET Core project. "

我的目標:是同時實現的EntityFramework 6和的EntityFramework核心側在n層解決方案中並排。

解決方案:

  • 核心ASP.NET Web應用程序(.NET框架)與個人用戶帳戶驗證
  • 的Windows類庫文件(.dll)包含BLL & DAL

實施EF 6和EF Core並排的原因是:

  • EF核心1.x的執行問題(遷移,許多到零關係)
  • 個人用戶帳戶的身份驗證ASP.NET中的核心有Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext
  • 此使用的依賴 - 案例將實現目前依賴於實體框架BreezeJS 6

我可以成功添加遷移到ASP.NET核心Web應用程序如下:

PM> EntityFrameworkCore\Add-Migration InitialCreate 
PM> EntityFramework\Add-Migration InitialCreate 

Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in assembly 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=14.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable." At C:\Src\Hcs.NetCore\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:720 char:5 + $domain.SetData('startUpProject', $startUpProject) ...

如果我卸載ASP.NET核心Web應用程序,那麼我就可以成功添加EF6遷移到Windows類:但是,試圖遷移添加到Windows類庫時,我得到一個異常庫的步驟如下:

PM> EntityFramework\enable-migrations 
PM> EntityFramework\add-migration InitialCreate 

現在我已經在兩個項目中進行了初始遷移。

然而,當我運行ASP.NET核心Web應用程序,我得到了幾個運行時異常:

如果我有我的System.Data.Entity.DbContext的自定義實現參數的構造函數,然後我得到以下運行時異常:

System.Data.SqlClient.SqlException was unhandled by user code …
Message=A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified) …

這是通過刪除默認構造函數來解決的。

當我嘗試註冊一個用戶,下面的異常被拋出:

System.Data.SqlClient.SqlException (0x80131904): Cannot open database "xxx" requested by the login. The login failed. Login failed for user yyy\zzz'. at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling) at

Q - 我在正確的軌道上?現在這只是一個SQL Server身份驗證問題?或者,還有其他問題涉及?

+0

關於如何在EF 6和EF內核上運行.Net 4.6 MVC項目的任何想法?我不想一次性將所有內容遷移到EF內核,但確實需要一些功能來加速導入和批量更新。 – TWilly

+0

[EF核心文檔](https://docs.microsoft.com/en-us/ef/core/)指出EF Core是跨平臺的。我的理解是,爲了實現跨平臺,EF Core必須運行在.NET核心應用程序中。但是,[NuGet](https://www.nuget。org/packages/Microsoft.EntityFrameworkCore /)在依賴項部分列出了.NET Framework 4.5.1。也許有人會說如果可以在.NET 4x應用程序中運行EF Core。 FWIW,您可以找到[功能比較](https://docs.microsoft.com/en-us/ef/efcore-and-ef6/features)以提供信息。 – RandyDaddis

回答

1

「異常呼叫‘SetData的’與‘2’的參數(一個或多個)異常:」:

在包管理器

的可以通過傳遞下列命令要麼-StartupProject-StartupProjectName參數來補救控制檯,設置包含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.Sq lException(0x80131904):無法打開登錄請求的數據庫「xxx」。登錄失敗「

「System.Data.SqlClient.SqlException (0x80131904): Cannot open database "xxx」 requested by the login. The login failed.」例外,在運行時可以通過點擊[Apply Migrations]按鈕保存新的用戶帳戶,時,在設計時予以糾正通過執行Update-Database如下:

在Package Manager Console中,將Default Project設置爲包含EF6上下文的類庫並執行:

PM> EntityFramework\Update-Database -StartupProject Dna.Net.Application.DAL.EF6 

在Package Manager控制檯,設置默認項目的類庫包含EF核心內容和執行:

PM> EntityFrameworkCore\Update-Database 

在這一點上,我可以使用任何服務器資源管理器或SQL Server對象資源管理器檢查數據庫。

Update-Database命令爲EFCore和EF6上下文創建了唯一的數據庫。

該解決方案如下包含在以下情況例外的Getting Started with ASP.NET Core and Entity Framework 6的示例應用程序部分的準則:

  • 我並不需要實現IDbContextFactory

現在我可以成功執行以下測試:

  • 通過ASP.NET MVC核心單個用戶帳戶腳手架添加用戶。
  • 修改(ASP.NET Core MVC腳手架)HomeController.About()將自定義實體持久化並檢索到自定義System.Data.Entity.DbContext實現。
  • 修改About.cshtml以顯示持久化的自定義實體。
1

EF6命令不知道如何使用ASP.NET Core項目(寫入時它們不存在)。在運行EF6命令之前,您可能不得不卸載這些項目。

您也可以明確指定-StartupProject作爲解決問題的EF6項目。

+0

我已經修改了這個問題,以包含來自ASP.NET Core doc文章的摘錄。不幸的是,該文章中引用的示例項目的鏈接正在拋出HTTP 404. @bricelam你是說這篇文章不正確? – RandyDaddis

+0

這是正確的。這是避免擴展方法衝突的最佳方法。運行時將工作得很好。但是,您可能需要跳過一些環節才能使設計工具正常工作。指定'-StartupProject'也可以避免這個問題。 – bricelam

相關問題