【发布时间】:2019-03-13 12:49:03
【问题描述】:
我收到以下错误
“附加“Datos.Medico”类型的实体失败,因为相同类型的另一个实体已经具有相同的主键值。当使用“附加”方法或将实体的状态设置为“未更改”时,可能会发生这种情况' 或 'Modified' 如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,请使用 'Add' 方法或 'Added' 实体state 来跟踪图表,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。”
当我尝试将实体附加到上下文时发生错误,如下所示:
public override void Alta(Medico medico)
{
foreach (Especialidad especialidad in medico.Especialidad)
{
this.context.Especialidad.Attach(especialidad);
}
base.Alta(medico);
}
Especialidad 实体被获取为不跟踪,因为它用于填充组合:
public List<Especialidad> ObtenerEspecialidades()
{
var especialidades = context.Especialidad.AsNoTracking();
/*
var especialidades = from unaEspecialidad in context.Especialidad
select unaEspecialidad;
*/
return especialidades.ToList();
}
然后从组合中取出并添加到包含List<Especialidad> 的Medico 实体。
提前致谢。
更新
我按要求包括实体定义:
public Medico()
{
this.Agenda = new HashSet<Agenda>();
this.Historia_Clinica_Elemento = new HashSet<HistoriaClinicaElemento>();
this.Turno = new HashSet<Turno>();
this.Especialidad = new HashSet<Especialidad>();
this.Espera_Atencion = new HashSet<EsperaAtencion>();
}
public int ID { get; set; }
public string Nombre { get; set; }
public string Apellido { get; set; }
public Nullable<int> Matricula { get; set; }
public Nullable<int> TipoDocumento { get; set; }
public Nullable<long> Numero_Documento { get; set; }
public Nullable<System.DateTime> Fecha_Nacimiento { get; set; }
public Nullable<int> Direccion { get; set; }
public string Usuario { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Agenda> Agenda { get; set; }
public virtual Direccion Direccion1 { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<HistoriaClinicaElemento> Historia_Clinica_Elemento { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Turno> Turno { get; set; }
public virtual TipoDocumento Tipo_Documento { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Especialidad> Especialidad { get; set; }
public virtual Usuario Usuario1 { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<EsperaAtencion> Espera_Atencion { get; set; }
特别:
public partial class Especialidad
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Especialidad()
{
this.Medico = new HashSet<Medico>();
}
public int ID { get; set; }
public string Nombre { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Medico> Medico { get; set; }
}
【问题讨论】:
标签: c# entity-framework