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
C# 添加多个实体的实体框架_C#_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# 添加多个实体的实体框架

C# 添加多个实体的实体框架,c#,entity-framework,asp.net-web-api,C#,Entity Framework,Asp.net Web Api,我正在尝试使用HTTPPOST在我的模型上创建一个新实体列表 public HttpResponseMessage Post(int requestId, IEnumerable<Component> components) { Request request = database.Request.Find(requestId); foreach(var component in components) { database.Entry(compo

我正在尝试使用HTTPPOST在我的模型上创建一个新实体列表

public HttpResponseMessage Post(int requestId, IEnumerable<Component> components)
{
   Request request = database.Request.Find(requestId);
   foreach(var component in components)
   {
         database.Entry(component.ComponentType).State = EntityState.Unchanged;
         database.Entry(component.SourceResource).State = EntityState.Unchanged;
         database.Entry(component.TargetResource).State = EntityState.Unchanged;
         request.Component.Add(component);
   }
   database.SaveChanges();
   return response;
}
当components列表只有一个元素时,它工作正常,但是当它有两个或更多元素时,我会收到以下错误消息:

EntityFramework.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理。 其他信息:附加“AUP.ComponentType”类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。 如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”


如何仅添加组件的字段并保留对数据库中已存在的组件类型、SourceResource和TargetResource的引用?

您需要添加引用,而不是id的引用


您认为这有助于确保不添加具有相同主键的元素吗?你看到错误信息了吗?它抛出错误的原因非常清楚。您不能添加具有相同主键的多个实例。components列表中有一组具有相同ComponentType的组件,因此database.Entrycomponent.ComponentType.State=EntityState。如果要让数据库知道该ComponentType已存在,则不作更改,只需添加对它的引用。