我在ASP.NET WebAPI项目中使用Breeze,我添加了breezecontroller
[BreezeController]
public class BreezeController : ApiController
{
readonly EFContextProvider<MyEntities> _context
= new EFContextProvider<MyEntities>();
[HttpGet]
public string Metadata()
{
return _context.Metadata();
}
不幸的是,当我调用createEntity时,我得到了错误 如果没有先设置其密钥或将其entityType'AutoGeneratedKeyType'属性设置为“无”以外的其他内容,则无法将对象附加到EntityManager
当调用元数据api时,不是breeze自动初始化实体吗?
TIA
答案 0 :(得分:7)
我打赌你正在尝试创建的实体被定义为客户端...而不是服务器......负责设置唯一密钥。我敢打赌,关键属性是Guid,因为EF Code First假设Guid密钥属性是由客户端默认确定的。
如果是这样,那么在您将新实体添加到管理器之前,由您在创建实体时设置密钥。
您已选择使用EntityManager.createEntity
方法创建新实体。这也是我的最爱。
但您必须记住,此方法会尝试自动将新实体添加到管理器中(如here所述)。因此,要使用此方法,必须在Breeze将其添加到管理器之前初始化新实体的密钥。您可以通过以下三种方式之一来实现:
createEntity
来电的初始化参数中。选项#3如下所示:
var newThing = manager.createEntity("Thing", {id: breeze.core.getUuid()});
我会自己选择#1选项。
答案 1 :(得分:2)
请发布您的客户端微风代码。没有它我无法确定,但我猜你在“createEntity”调用之前没有为该实体获取元数据。您必须先拥有metadataStore才能创建实体。例如:
breezeProjectManager().metadataStore.fetchMetadata().then(function() {
//createEntity code here
}