我正在尝试使用此代码保存少数实体:
this.UserService.Users.Add(eUser);
if (SelectedRewindItems != null && SelectedRewindItems.Count > 0)
{
foreach (var ug in SelectedRewindItems)
{
HpmModel.Usergroup nUg = new HpmModel.Usergroup();
decimal numId;
var a = Decimal.TryParse(ug.Key.ToString(), out numId);
nUg.Groupid = numId;
nUg.Userid = eUser.Userid;
// eUser.Usergroups.Add(nUg);
this.UserService.Usergroups.Add(nUg);
}
}
var submitOp = this.UserService.SubmitChanges();
IsSuccess = true;
ActionMessageOnButtonSuccess = User.Fname + " " + User.Lname + " Added Successfully !!";
string message = null;
if (submitOp.EntitiesInError.Any())
{
message = string.Empty;
Entity entityInError = submitOp.EntitiesInError.First();
if (entityInError.EntityConflict != null)
{
EntityConflict conflict = entityInError.EntityConflict;
foreach (var cm in conflict.PropertyNames)
{
message += string.Format("{0}", cm);
}
}
else if (entityInError.ValidationErrors.Any())
{
message += "\r\n" + entityInError.ValidationErrors.First().ErrorMessage;
}
MessageBox.Show(message);
}
else
{
MessageBox.Show("Submit Done");
}
但是我收到了这个错误:
System.InvalidOperationException未被用户代码
处理 的HResult = -2146233079
Message =已成功提交对数据库的更改,但更新对象上下文时发生错误。 ObjectContext可能处于不一致状态。内部异常消息:保存或接受更改失败,因为多个类型为“HpmModel.Usergroup”的实体具有相同的主键值。确保显式设置的主键值是唯一的。确保在数据库和Entity Framework模型中正确配置了数据库生成的主键。使用实体设计器进行数据库优先/模型优先配置。使用'HasDatabaseGeneratedOption'流畅API或'DatabaseGeneratedAttribute'进行代码优先配置。
Source = EntityFramework
堆栈跟踪: 在System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions选项,IDbExecutionStrategy executionStrategy,Boolean startLocalTransaction) 在System.Data.Entity.Core.Objects.ObjectContext。<> c__DisplayClass2a.b__27() at System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute [TResult](Func
1 operation) at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options, Boolean executeInExistingTransaction) at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options) at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges() at OpenRiaServices.DomainServices.EntityFramework.LinqToEntitiesDomainService
1.InvokeSaveChanges(Boolean retryOnConflict)在c:\ Code \ Repos \ openriaservices \ OpenRiaServices.DomainServices.EntityFramework \ Framework \ LinqToEntitiesDomainService.cs :第145行 at c:\ Code \ Repos \ openriaservices \ OpenRiaServices.DomainServices.EntityFramework \ Framework \ LinqToEntitiesDomainService.cs中的OpenRiaServices.DomainServices.EntityFramework.LinqToEntitiesDomainService`1.PersistChangeSet():第138行 在OpenRiaServices.DomainServices.Server.DomainService.PersistChangeSetInternal() 在OpenRiaServices.DomainServices.Server.DomainService.Submit(ChangeSet changeSet) InnerException:System.InvalidOperationException 的HResult = -2146233079 消息=保存或接受更改失败,因为多个类型为“HpmModel.Usergroup”的实体具有相同的主键值。确保显式设置的主键值是唯一的。确保在数据库和Entity Framework模型中正确配置了数据库生成的主键。使用实体设计器进行数据库优先/模型优先配置。使用'HasDatabaseGeneratedOption'流畅API或'DatabaseGeneratedAttribute'进行Code First配置。 来源=的EntityFramework 堆栈跟踪: 在System.Data.Entity.Core.Objects.ObjectStateManager.FixupKey(EntityEntry条目) 在System.Data.Entity.Core.Objects.EntityEntry.AcceptChanges() 在System.Data.Entity.Core.Objects.ObjectContext.AcceptAllChanges() 在System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions选项,IDbExecutionStrategy executionStrategy,Boolean startLocalTransaction) InnerException:
当我检查数据库实体已保存但仍然给我这个问题。
这是因为我在保存用户&然后,UserGroup实体分开。或子实体应与父实体一起保存。我是初学者,面对挑战。
答案 0 :(得分:3)
浪费了很多时间之后,我才知道我需要修复我的EDMX文件&实体代码。 所以我在我的实体中添加了:
[DatabaseGenerated( DatabaseGeneratedOption.Identity)]
在我的用户的SSDL文件中 - >用户组(1-M)关系 用户组ID节点我已添加:
StoreGeneratedPattern="Identity" [SSDL]
在CSDL中:
ed:StoreGeneratedPattern="Identity"
在我的代码中:
this.UserService.Users.Add(eUser);
if (SelectedRewindItems != null && SelectedRewindItems.Count > 0)
{
foreach (var ug in SelectedRewindItems)
{
HpmModel.Usergroup nUg = new HpmModel.Usergroup();
decimal numId;
var a = Decimal.TryParse(ug.Key.ToString(), out numId);
nUg.Groupid = numId;
nUg.Userid = eUser.Userid;
eUser.Usergroups.Add(nUg);
}
}
应用这些更改后,SaveChanges()
有效。
这blog post帮助了我。