Entity framework EF 6(异常)序列包含多个元素-插入新记录

Entity framework EF 6(异常)序列包含多个元素-插入新记录,entity-framework,asp.net-mvc-4,exception,Entity Framework,Asp.net Mvc 4,Exception,我检查记录是否存在。当没有记录时,modelInit变量获取modelInit.Count=0。我试图在不检查记录是否存在的情况下保存,并引发了相同的异常 来源 public void IncluiModeloIniciativa(ModeloIniciativaAuxiliar model) { ValidateEmptyFields(model); int idIniciativa = model.IdIniciativa; int idModelo = model

我检查记录是否存在。当没有记录时,modelInit变量获取modelInit.Count=0。我试图在不检查记录是否存在的情况下保存,并引发了相同的异常

来源

public void IncluiModeloIniciativa(ModeloIniciativaAuxiliar model)
{
    ValidateEmptyFields(model);

    int idIniciativa = model.IdIniciativa;
    int idModelo = model.IdModelo;
    List<ModeloIniciativa> modelInit = context.ModelosIniciativas
        .Where(x => x.IdIniciativa == idIniciativa && x.IdModelo == idModelo).ToList();

    if (null != modelInit && modelInit.Count > 0)
    {
        throw new ValidationException(
            Resources.ModeloIniciativaResources.ModeloIniciativaJaExiste);
    }

    try
    {
        context.ModelosIniciativas.Add(new ModeloIniciativa()
        {
            IdIniciativa = model.IdIniciativa,
            IdModelo = model.IdModelo,
            Status = model.StatusMake,
            VLR_INICIATIVA = model.VlrIniciativaMake.Value,
            VLR_APROVADO = model.VlrAprovadoMake.Value,
            VLR_SALDO = model.VlrSaldoMake.Value,
            TipoIniciativa = TipoIniciativa.Make.ToString()
        });

        context.ModelosIniciativas.Add(new ModeloIniciativa()
        {
            IdIniciativa = model.IdIniciativa,
            IdModelo = model.IdModelo,
            Status = model.StatusBuy,
            VLR_INICIATIVA = model.VlrIniciativaBuy.Value,
            VLR_APROVADO = model.VlrAprovadoBuy.Value,
            VLR_SALDO = model.VlrSaldoBuy.Value,
            TipoIniciativa = TipoIniciativa.Buy.ToString()
        });

        context.ModelosIniciativas.Add(new ModeloIniciativa()
        {
            IdIniciativa = model.IdIniciativa,
            IdModelo = model.IdModelo,
            Status = model.StatusRnD,
            VLR_INICIATIVA = model.VlrIniciativaRnD.Value,
            VLR_APROVADO = model.VlrAprovadoRnD.Value,
            VLR_SALDO = model.VlrSaldoRnD.Value,
            TipoIniciativa = TipoIniciativa.RnD.ToString()
        });

        context.ModelosIniciativas.Add(new ModeloIniciativa()
        {
            IdIniciativa = model.IdIniciativa,
            IdModelo = model.IdModelo,
            Status = model.StatusCodesign,
            VLR_INICIATIVA = model.VlrIniciativaCodesign.Value,
            VLR_APROVADO = model.VlrAprovadoCodesign.Value,
            VLR_SALDO = model.VlrSaldoCodesign.Value,
            TipoIniciativa = TipoIniciativa.Codesign.ToString()
        });

        context.SaveChanges();
    }
    catch (Exception ex)
    {
        throw ex;
    }


}
堆栈跟踪:

  at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__2[TResult](IEnumerable`1 sequence)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression)
   at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source, Expression`1 predicate)
   at BHX.ClienteGroup.eProgram.DataAccess.ECContext.GetOrCreateEntity(Type type) in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs:line 113
   at BHX.ClienteGroup.eProgram.DataAccess.ECContext.saveEntryOperation(DbEntityEntry item, EntityState state) in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs:line 99
   at BHX.ClienteGroup.eProgram.DataAccess.ECContext.SavePrograms(Boolean auditing) in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs:line 72
   at BHX.ClienteGroup.eProgram.DataAccess.ECContext.SavePrograms() in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs:line 35
   at BHX.ClienteGroup.eProgram.Services.ModeloIniciativaServices.IncluiModeloIniciativa(ModeloIniciativaAuxiliar model) in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\Services\ModeloIniciativaServices.cs:line 204
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1源)
位于System.Data.Entity.Core.Objects.elink.ObjectQueryProvider.b__2[TResult](IEnumerable`1序列)
位于System.Data.Entity.Core.Objects.Elink.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1查询,表达式queryRoot)
位于System.Data.Entity.Core.Objects.Elink.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](表达式)
在System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](表达式)处
位于System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1源,表达式`1谓词)
在C:\Projetos RTC\e-Program\W130_PRINCIPAL\03-implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs中的BHX.clientgroup.eProgram.DataAccess.ECContext.GetOrCreateEntity(类型)处
在C:\Projetos RTC\e-Program\W130_PRINCIPAL\03-implementacao\aplicativo\web\DataAccess\ECContext.Auditing中的BHX.clientgroup.eProgram.DataAccess.ECContext.saveEntryOperation(DbEntityEntry项,EntityState)中
在C:\Projetos RTC\e-Program\W130_PRINCIPAL\03-implementacao\aplicativo\web\DataAccess\ECContext.auditing.cs中的BHX.clientgroup.eProgram.DataAccess.ECContext.SavePrograms(布尔审核)中
在C:\Projetos RTC\e-Program\W130_PRINCIPAL\03-implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs中的BHX.clientgroup.eProgram.DataAccess.ECContext.SavePrograms()处
在BHX.clientgroup.eProgram.Services.ModeloIniciativaServices.IncluiModeloIniciativa(modeloiniciativauxiliar model)中的C:\Projetos RTC\e-Program\W130_PRINCIPAL\03-implementacao\aplicativo\web\Services\ModeloIniciativaServices.cs:第204行

每次对表使用Single或SingleOrDefault时,如果结果是多个元素,则会引发此异常。请参阅ECContext中的SaveChanges已自定义以保存审核日志的单元格。检查它如何保存这些日志,为什么不应该有一个单一的键,或者检查注册表是否存在并多次保存。您可能没有正确使用自定义方法。

能否显示您的
GetOrCreateEntity
方法?您有多个具有相同
名称的实体,
SingleOrDefault
搜索具有提供条件的实体,并确保最多有一个满足该条件的对象实例,如果有更多,它抛出一个例外你是对的。审核多次保存了实体的名称。我删除并停止抛出异常。我将要求建筑师修复audity库。谢谢。你说得对。有一个名为save()的方法,它在调用自定义SaveChanges之前执行一些操作。这些方法由我们的架构师定制。
  at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__2[TResult](IEnumerable`1 sequence)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
   at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression)
   at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source, Expression`1 predicate)
   at BHX.ClienteGroup.eProgram.DataAccess.ECContext.GetOrCreateEntity(Type type) in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs:line 113
   at BHX.ClienteGroup.eProgram.DataAccess.ECContext.saveEntryOperation(DbEntityEntry item, EntityState state) in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs:line 99
   at BHX.ClienteGroup.eProgram.DataAccess.ECContext.SavePrograms(Boolean auditing) in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs:line 72
   at BHX.ClienteGroup.eProgram.DataAccess.ECContext.SavePrograms() in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\DataAccess\ECContext.Auditing.cs:line 35
   at BHX.ClienteGroup.eProgram.Services.ModeloIniciativaServices.IncluiModeloIniciativa(ModeloIniciativaAuxiliar model) in C:\Projetos RTC\e-Program\W130_PRINCIPAL\03 - implementacao\aplicativo\web\Services\ModeloIniciativaServices.cs:line 204