2013-03-21 48 views
0

上我下的實體框架教程: Link實體框架代碼優先外部SQL服務器

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

<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 Migrations不太瞭解。你有沒有遇到過上述錯誤,Code Migrations能解決這個問題嗎?如果是這樣,爲什

回答

0

這兩個我都試過了初始化方法失敗

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

以下SO帖子提供了我的問題的答案: Setting up a Entity Framework Code First Database on SQL Server 2008

我已經嘗試了兩者的結合,並決定最好的解決方案是手動進入SQL Management Studio並刪除數據庫,並使用初始化程序重新創建它,因爲這允許我將Seed的內容數據庫。

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

有關更多關於種子數據庫的信息,因爲它也是一個相當不穩定的過程! How can I get my database to seed using Entity Framework CodeFirst?

0

從我的閱讀(請糾正我,如果我錯了)這裏的情況是,你有一個現有的(也許是空的)遠程服務器上的數據庫,你希望把你的EF代碼首先工作。

錯誤是因爲我認爲EF正在尋找一個_MigrationHistory表(關於什麼是EF代碼優先遷移已針對它運行的元數據等)並且無法找到它。對於某些背景/興趣閱讀,此表有一些合理的覆蓋範圍here

因此,要解決這個問題,我認爲採取的步驟是:

  1. 初始化您的數據庫,以便確認EF代碼優先的東西
  2. 更新數據庫,前滾所有遷移到日期

我發現了一些很好的覆蓋範圍,如何做到這一點here。這個博客一般也有一些EF主題的覆蓋範圍

PS。我猜你的.dsf/SQL精簡版數據庫不會有這個問題,因爲EF代碼首先會在第一次運行時爲你創建它,所以它已經被確認是代碼優先的數據庫。

0

Here是實體框架電動工具的鏈接。它用於在遠程服務器上通過「反向工程」創建模型。然後您可以使用EF輕鬆訪問此數據庫。

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

但是有可能迫使數據庫使用被丟棄:當數據庫中已存在

Reverse Engineer Code First - Generates POCO classes, derived DbContext and Code First mapping for an existing database

+0

這將是很好,如果我有我的數據庫上的數據:)我試圖採取代碼優先的方法。 – Jack 2013-03-22 09:31:04

+0

啊我明白了,我一定錯過了那部分;)我會留下答案。也許它有助於某人 – William 2013-03-22 09:34:02