Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架6保存实体时的主键配置问题_Entity Framework_Wcf Ria Services - Fatal编程技术网

Entity framework 实体框架6保存实体时的主键配置问题

Entity framework 实体框架6保存实体时的主键配置问题,entity-framework,wcf-ria-services,Entity Framework,Wcf Ria Services,我试图用以下代码保存几个实体: this.UserService.Users.Add(eUser); if (SelectedRewindItems != null && SelectedRewindItems.Count > 0) { foreach (var ug in SelectedRewindItems) { HpmModel.Usergroup nUg = new HpmModel.Usergroup();

我试图用以下代码保存几个实体:

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”类型的多个实体具有相同的主键值。确保显式设置的主键值是唯一的。确保在数据库和实体框架模型中正确配置了数据库生成的主键。使用实体设计器进行数据库优先/模型优先配置。使用“HasDatabaseGeneratedOption”fluent API或“DatabaseGeneratedAttribute”进行代码优先配置

Source=EntityFramework

堆栈跟踪: 位于System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions选项、IDBEcutionStrategy executionStrategy、Boolean startLocalTransaction) 在System.Data.Entity.Core.Objects.ObjectContext.c__DisplayClass2a.b__27()中 在System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func
1操作)中
位于System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions选项,布尔值executeInExistingTransaction)
位于System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions)
位于System.Data.Entity.Core.Objects.ObjectContext.SaveChanges()处
在OpenRiaServices.DomainServices.EntityFramework.LinqToEntitiesDomainService
1.调用c:\code\Repos\OpenRiaServices\OpenRiaServices.DomainServices.EntityFramework\Framework\LinqToEntitiesDomainService.cs中的VeChanges(布尔retryOnConflict):第145行 在c:\Code\Repos\OpenRiaServices\OpenRiaServices.DomainServices.EntityFramework.LinqToEntitiesDomainService`1.PersistChangeSet()中的OpenRiaServices.DomainServices.EntityFramework\Framework\LinqToEntitiesDomainService.cs:第138行 在OpenRiaServices.DomainServices.Server.DomainService.PersistChangeSetInternal()上 在OpenRiaServices.DomainServices.Server.DomainService.Submit(变更集变更集)上 InnerException:System.InvalidOperationException HResult=-2146233079 Message=保存或接受更改失败,因为“HpmModel.Usergroup”类型的多个实体具有相同的主键值。请确保显式设置的主键值是唯一的。确保在数据库和实体框架模型中正确配置了数据库生成的主键。请对数据库使用实体设计器第一个/模型优先配置。使用“HasDatabaseGeneratedOption”fluent API或“DatabaseGeneratedAttribute”进行代码优先配置。 Source=EntityFramework 堆栈跟踪: 位于System.Data.Entity.Core.Objects.ObjectStateManager.FixupKey(EntityEntry) 位于System.Data.Entity.Core.Objects.EntityEntry.AcceptChanges()处 位于System.Data.Entity.Core.Objects.ObjectContext.AcceptillChanges()处 位于System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions选项、IDBEcutionStrategy executionStrategy、Boolean startLocalTransaction) 内部异常:

当我检查数据库时,实体被保存了,但它仍然给了我这个问题


这是因为我试图在分别保存用户和用户组实体之后保存它们。或子实体应与父实体一起保存。我是一个初学者,因此面临挑战。

在浪费了很多时间之后,我开始知道我需要修复我的EDMX文件和实体代码。 因此,我在我的实体中添加了:

[DatabaseGenerated( DatabaseGeneratedOption.Identity)]
在我的用户->用户组(1-M)关系中的SSDL文件中 我添加的Usersgroup 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()
起作用


这对我很有帮助。

任何一个帮助请查看我的问题我在使用Oracle数据库时也遇到了同样的问题。PK在插入触发器上自动递增,但EF6抱怨设置了重复的PK条目。我必须将模型中的所有PK属性更改为“StoreGeneratedPattern”=>Identity(替换为“none”)。保存我的屁股兄弟。我在最后两个小时搜索@阿基尔蒂