簡體   English   中英

外部SQL服務器上的實體框架代碼優先

[英]Entity Framework Code First on external SQL server

我在關注Entity Framework教程: 鏈接

我已經下載了源代碼,然后運行了。 該項目工作正常(使用默認的連接字符串)。

<add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />

接下來,我更改了連接字符串以連接到遠程服務器(成功連接)。 但是未創建表,並且在運行應用程序並訪問控制器時出現以下錯誤。

錯誤:

Model compatibility cannot be checked because the database does not contain 
model metadata. Model compatibility can only be checked for databases created 
using Code First or Code First Migrations.

我的數據庫用戶是“ dbowner”,所以我無法想象這是數據庫訪問問題。

我是EF的新手,對Code First遷移了解不多。 您是否遇到上述錯誤,代碼遷移會解決此問題嗎? 如果可以,為什么?

根據我的閱讀(如果我錯了,請糾正我),這里的情況是您希望將EF代碼優先的工作放到遠程服務器上,現有數據庫(可能是空的)。

錯誤即將到來是因為,我認為EF正在尋找_MigrationHistory表(有關已針對它運行了EF代碼優先遷移的元數據),並且找不到它。 此處有一些合理的表格覆蓋范圍,供您閱讀一些背景知識。

因此,要解決此問題,我認為要采取的步驟是:

  1. 初始化您的數據庫,使其確認EF代碼優先
  2. 更新數據庫,前滾所有迄今為止的遷移

我在這里找到了一些很好的方法。 該博客還對EF主題進行了很好的介紹

PS。 我猜想您的.dsf / SQL Compact Edition數據庫不會出現此問題,因為EF代碼優先會在首次運行時為您創建它,因此它已經被公認是代碼優先數據庫。

是Entity Framework Power Tools的鏈接。 它用於通過在遠程服務器上對數據庫進行“反向工程”來創建模型。 然后,您可以使用EF輕松訪問該數據庫。

反向工程師代碼優先-為現有數據庫生成POCO類,派生的DbContext和代碼優先映射

當數據庫已經存在時,我嘗試過的兩個初始化方法都失敗了:

Database.SetInitializer<Context>(new Initializer());
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());

但是,可以使用以下方法強制刪除數據庫:

Database.SetInitializer(new DropCreateDatabaseAlways<Context>());

以下SO帖子提供了我的問題的答案: 在SQL Server 2008上設置實體框架代碼優先數據庫

我已經嘗試將兩者結合起來,並決定最好的解決方案是手動進入SQL Management Studio並刪除數據庫,然后使用初始化程序重新創建它,因為這使我可以播種數據庫的內容。

Database.SetInitializer<Context>(new Initializer());

請參閱此處,以獲取更多有關播種數據庫的信息,因為它也是一個不穩定的過程! 如何使用Entity Framework CodeFirst將數據庫植入種子?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM