BreezeJS:Metadata()将Breeze 1.2升级到1.4并将EF 5.0升级到6.1后出错

时间:2014-03-29 01:11:08

标签: entity-framework breeze upgrade

我尝试使用Breeze 1.2,EF 5.0在Angular中升级我的项目以使用最新的Breeze / EF。该项目工作正常,但升级后我遇到了各种问题。

实际上,我只需要EF中的一些新功能,所以我尝试先将EF从5.0升级到6.1。但是,我无法使用Breeze 1.2安装EF 6.1。所以,我必须先升级到Breeze 1.4。之后,由于新的命名空间,我不得不做一些更改,以便再次编译项目。

第一个问题是路线已经改变。在v1.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) 

在服务器上,我在调用时收到了此错误消息以获取Metadata():

  

该物业' Id'无法配置为导航属性。该   property必须是有效的实体类型,属性应该是   非抽象的吸气剂和二传手。对于集合属性的类型   必须实现ICollection,其中T是有效的实体类型。

我迷路了。我发现这个postpost提到了名称空间的变化。但是,我不知道如何解决这个问题。例如,在服务器上,我的EntityState来自Breeze.ContextProvider,而不是来自System.Data。

有什么问题?我的实体(我有很多!)不再有效吗?我是否必须重新定义我的所有实体?

非常感谢任何提示!

1 个答案:

答案 0 :(得分:2)

好的,经过多次努力,我现在已经开始工作,但是使用相同的代码,所以我不确定它是如何修复的。这是我尝试的步骤。我首先评论了所有实体,然后我没有问题地得到元数据。然后,我逐个添加实体并运行获取元数据,但没有更多错误。

一个可能的猜测是,在升级到EF 6.1之后,我没有更改实体,因此我的db模式没有改变,并且EF 6.1与先前的模式不兼容。一旦我更改了实体,自动迁移就会启动。这只是我的猜测。

希望有人遇到同样的问题会有所帮助。