我尝试使用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是有效的实体类型。
我迷路了。我发现这个post和post提到了名称空间的变化。但是,我不知道如何解决这个问题。例如,在服务器上,我的EntityState来自Breeze.ContextProvider,而不是来自System.Data。
有什么问题?我的实体(我有很多!)不再有效吗?我是否必须重新定义我的所有实体?
非常感谢任何提示!
答案 0 :(得分:2)
好的,经过多次努力,我现在已经开始工作,但是使用相同的代码,所以我不确定它是如何修复的。这是我尝试的步骤。我首先评论了所有实体,然后我没有问题地得到元数据。然后,我逐个添加实体并运行获取元数据,但没有更多错误。
一个可能的猜测是,在升级到EF 6.1之后,我没有更改实体,因此我的db模式没有改变,并且EF 6.1与先前的模式不兼容。一旦我更改了实体,自动迁移就会启动。这只是我的猜测。
希望有人遇到同样的问题会有所帮助。