2014-03-29 41 views
1

我試圖使用Breeze 1.2,EF 5.0升級我的項目以使用最新的Breeze/EF。該項目工作正常,但升級後遇到各種問題。BreezeJS:Metadata()將Breeze 1.2升級到1.4並將EF 5.0升級到6.1後出現錯誤

其實,我只需要EF中的一些新功能,所以我試着先將EF從5.0升級到6.1。但是,我無法使用Breeze 1.2安裝EF 6.1。所以,我必須先升級到Breeze 1.4。之後,由於新的命名空間,我必須進行一些更改以重新編譯項目。

第一個問題是路由已經改變。在1.2版,我習慣叫

var manager = new breeze.EntityManager("api/breeze"); 

但在V1.4,我不得不打電話

var manager = new breeze.EntityManager("breeze/breeze"); 

然後,我得到了客戶這個錯誤:

GET http://localhost:1476/breeze/breeze/Metadata 500 (Internal Server Error) 

在服務器,我得到這個錯誤消息打電話來獲取元數據():

屬性'Id'不能共同被配置爲導航屬性。 屬性必須是有效的實體類型,並且該屬性應具有非抽象的getter和setter 。對於集合屬性,類型 必須實現ICollection,其中T是有效的實體類型。

我在這裏迷路了。我發現這post和這post提到命名空間的變化。但是,我不知道如何解決它在我的情況。例如,在服務器上,我的EntityState來自Breeze.ContextProvider,而不是來自System.Data。

什麼是問題?我的實體(我有很多!)不再有效嗎?我是否必須重新定義所有實體?

任何提示都非常感謝!

回答

2

好吧,在經過很多努力之後,我現在得到了它的工作,但是使用相同的代碼,所以我不確定它是如何得到修復的。這是我嘗試的步驟。我首先評論了所有的實體,然後我得到沒有問題的元數據。然後,我逐個添加實體並運行獲取元數據,但沒有更多的錯誤。

一個可能的猜測是,在升級到EF 6.1後,我沒有更改實體,因此我的數據庫模式沒有更改,EF 6.1與以前的模式不兼容。一旦我改變了實體,自動遷移就開始了。這只是我的猜測。

希望它有助於防止有人遇到同樣的問題。