我的应用程序中有以下非常标准的Breeze API Controller端点:
public SaveResult SaveChanges(JObject saveBundle)
{
return _contextProvider.SaveChanges(saveBundle);
}
Run Code Online (Sandbox Code Playgroud)
我的后端数据库使用配置为身份的int ID.
从具有有效更改集的客户端调用时,一切都很好.
但是,如果在打电话给我之前_contextProvider.SaveChanges(saveBundle) function,我会进行任何形式的查询.例如:
public SaveResult SaveChanges(JObject saveBundle)
{
int incomingUserId = Convert.ToInt32(saveBundle["entities"][0]["Id"]);
AspNetUser EditedUser = (from u in Context.AspNetUsers where u.Id == incomingUserId select u).FirstOrDefault();
// ......
// do something with the EditedUser (like validations of any sort)
// ......
return _contextProvider.SaveChanges(saveBundle);
}
Run Code Online (Sandbox Code Playgroud)
保存失败并显示错误:
保存或接受更改失败,因为"xxxx.App_Data.AspNetUser"类型的多个实体具有相同的主键值.确保显式设置的主键值是唯一的.确保在数据库和Entity Framework模型中正确配置了数据库生成的主键.使用实体设计器进行数据库优先/模型优先配置.使用'HasDatabaseGeneratedOption'流畅API或'DatabaseGeneratedAttribute'进行Code First配置.
鉴于我在做什么,这是预期的行为吗?有没有其他方法可以在SaveChanges调用之前进行初始的单独查询而不会破坏某些内容并使查询失败?