尝试插入嵌入另一个实体的实体,我收到了这个错误:
无法跟踪实体类型“Tache”的实例,因为已经跟踪了具有相同键的此类型的另一个实例。添加新实体时,对于大多数密钥类型,如果未设置密钥,则将创建唯一的临时密钥值(即,如果为密钥属性指定了其类型的默认值)。如果要为新实体显式设置键值,请确保它们不会与现有实体或为其他新实体生成的临时值发生冲突。附加现有实体时,请确保只有一个具有给定键值的实体实例附加到上下文。'
C#型号:
public class Mission
{
[Key]
public int Id { get; set; }
public string Titre { get; set; }
public DateTime DateDebut { get; set; }
public DateTime DateFin { get; set; }
public string Context { get; set; }
public ICollection<Tache> Taches { get; set; }
public string Client { get; set; }
//public ICollection<MissionComp> Competences{ get; set; }
}
发布功能:
public Mission Post([FromBody]Mission mission)
{
try
{
context.Tache.AddRange(mission.Taches);
//context.SaveChanges();
context.Add(mission);
context.SaveChanges();
return mission;
}
catch (System.Exception ex)
{
logger.LogError(ex.Message, ex);
throw;
}
}
已经在堆栈溢出和git上搜索了一些答案,但没有人帮助我。 如果有人有想法我真的会感兴趣:D
谢谢!
编辑:
这里有一些有趣的东西,我发送了一个'Tache'数组,但两者的Id是相同的,所以我认为它们会发生碰撞:https://puu.sh/vLqTE/52fb2059bc.png
也许有人知道如何设置不碰撞的临时密钥?
答案 0 :(得分:0)
好的,所以我自己发现,由于一个不可知的原因,我列表中的所有对象都有相同的ID ......出于一个愚蠢的原因:
public addSousMission() {
let tache: Tache = {
Id: 1,
TacheString: this.champTache
}
tache.TacheString = this.champTache;
this.mission.Taches.push(tache);
this.champTache = '';
}
修改为解决我的所有问题:
public addSousMission() {
let tache: Tache = new Tache();
tache.TacheString = this.champTache;
this.mission.Taches.push(tache);
this.champTache = '';
}
感谢您的帮助:D