Entity framework EF 6(异常)序列包含多个元素-插入新记录
我检查记录是否存在。当没有记录时,modelInit变量获取modelInit.Count=0。我试图在不检查记录是否存在的情况下保存,并引发了相同的异常 来源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
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