2017-01-17 176 views
7

使用實體框架核心,您如何生成EF模型和實體?實體框架從現有數據庫創建核心模型

根據ASP.NET Core - Existing Database微軟的文章,你需要這樣一個在Package Manager控制檯運行命令:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 

這就給了你什麼表或視圖進口零控制。是否有可能這是反向設計數據庫並使用EF Core創建EF模型和實體的唯一方式,與現在完全使用Entity Framework的方式相比,這種進展如何?

+0

部分回答您的主要問題:「你是如何產生。[...]」 - 你在你的問題貼吧。有一個名爲實體框架電動工具的現有VS擴展,但它看起來還沒有更新以與EF Core一起工作。您習慣使用哪種慣例,以便選擇要生成的對象? –

+0

@MarkC。使用完整的實體框架,您將看到一系列數據庫對象,您可以在創建新的實體數據模型(edmx文件)時進行選擇。 –

+0

添加表格參數(來自https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db) –

回答

3

在Entity Framework Core中沒有辦法做到這一點。 閱讀這裏的文檔: https://docs.microsoft.com/en-us/ef/efcore-and-ef6/features

+0

哇,有很多缺失......那麼爲什麼會有人想要使用這個稱爲EF Core的殘缺ORM呢?跨平臺是使用EF Core的唯一優勢/動機嗎? –

+2

其實你有超過進口表控制,看看腳手架的DbContext文檔:https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell 你有-tables在您指定所有要導入的表參數,這裏是個例: https://github.com/aspnet/EntityFramework/wiki/Design-Meeting-Notes-(October-1,-2015)#table -selection功能於逆向工程 – Bouam

+0

@Bouam一旦你通過你仍然得到EDMX UI,您可以查看和編輯數據庫對象和領域,看看你的表之間的關係? –

1

我的情況是,我有一個.net 4.5 +類庫與DbContexts在其中。

這些DbContexts是使用「Code First from existing Database」嚮導從現有數據庫創建的。 EF Core似乎沒有這個嚮導。

從與EF核心兼容現有的數據庫創建一個新的代碼第一次的DbContext,我鬆散跟着引導here

我的步驟:

  • 創建一個新的核心類庫

  • 添加nuget包Microsoft.EntityFrameworkCore

  • 添加了NuGet包Microsoft.EntityFrameworkCore.Tools
  • 添加了NuGet包Microsoft.EntityFrameworkCore.SqlServer
  • 添加了NuGet包Microsoft.EntityFrameworkCore.SqlServer.Design

  • 打開nuget Package Manager控制檯

  • 輸入command

    Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;" 
    
  • 形式輸入提供商

    Microsoft.EntityFrameworkCore.SqlServer 
    

請注意,使用非核心項目時,你可能會遇到與NuGet包管理器控制檯問題。我通過創建一個新的核心類庫而不是.net來避免這個問題。

一旦你創建了上下文,你可以在Code First中像正常一樣編輯它,例如,您可以刪除不想使用的表格。

+1

+1 **創建一個新的核心類庫,而不是一個.net一個**的.Net 4.x的項目拋出'FileNotFoundException'上'Microsoft.EntityFrameworkCore.Design' – Youngjae

+0

他們都是.NET,我想你意思是使用.NET Core類庫而不是.NET Framework類庫。 – bcr

22

我知道這個問題有點舊,但我認爲這對於同樣的問題陷入困境的人來說非常有用。

如果我理解正確你的問題,你要指定應生成的表格。 如果將-Tables參數添加到命令中,則應該可以。

這裏是我用來生成數據庫3個表(在包管理器控制檯)的命令:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;" 
     Microsoft.EntityFrameworkCore.SqlServer 
    -OutputDir Models -Context NorthwndContext 
    -Tables Products,Categories,Suppliers -Force 

正如你所看到的,我用的是Northwnd,數據庫和只生成表「產品,分類和供應商「。顯然,你可以添加更多的表格,你只需要用逗號分隔它們。

如果您不知道,可以通過轉到Data Connections(服務器資源管理器),單擊要添加的數據庫並在右側(屬性)中獲取DatabaseName,您會看到一個Property(Name )。對我來說,這是「NORTHWND.MDF」。

我用 - 強制重寫我已經創建的模型。

我希望我可以幫忙。

PS:我只用ASP.NET酷睿2和Entity Framework核心2.0.0嘗試這個。

+4

謝謝,我只是覺得從全功能的edmx用戶界面,讓你也可以查看和編輯表格,關係,字段等到一些命令行工具和吹哨,作爲地面制動進展... –

+3

我不'我不知道MS最近一直在幹什麼。核心解決了的運行MS IT商店有1%的非IIS服務器上運行.net等問題的問題,如果這個想法就需要Windows服務器捕獲陰晴圓缺......作爲一個商業計劃,我不得到它。然而 – infocyde

+0

@HiHo我複製你的代碼,並在包控制檯沒有發生跑前面相同的工作了.NET 1.1的核心,我最近升級到2.0內核與EF以及和我無法更新的模型。 (https://github.com/aspnet/EntityFrameworkCore/wiki/Roadmap)他們說**我們將盡最大努力完成或至少取得這些進展:** – User

1

使用數據庫第一次嘗試時,我得到這個錯誤:

未能加載 型 'Microsoft.EntityFrameworkCore.Infrastructure.DesignTimeProviderServicesAttribute' 從程序集「Microsoft.EntityFrameworkCore,版本= 2.0.0.0, 文化=中性公鑰= adb9793829ddae60'

有4加入包:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.0" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.3" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" /> 

和命令:

Scaffold-DbContext "Data Source=xxxx;Initial Catalog=xxx;UID=sa;PWD=xxx;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities/DB 
2

您還可以將騙子的方法:打開VS2015,創建一個新的IIb類具有相同的名稱作爲實際的項目,然後運行實體數據模型嚮導。

一旦完成,複製並粘貼到你的.NET的核心工程。需要對結果代碼進行一些調整,但這是微不足道的。

但是,運行支架命令如上述是一種更好的解決方案。你的問題的

相關問題