实体框架添加多个实体

时间:2014-11-19 10:22:28

标签: c# entity-framework asp.net-web-api

我尝试使用HTTP POST在我的模型上创建新实体列表。

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;
}

当组件列表只有一个元素时它可以正常工作,但是当它有两个或更多元素时,我有以下错误信息:

类型&#39; System.InvalidOperationException&#39;的例外情况发生在EntityFramework.dll中但未在用户代码中处理。 附加信息:附加类型&#39; AUP.ComponentType&#39;的实体。失败,因为同一类型的另一个实体已具有相同的主键值。 使用&#39;附加&#39;方法或将实体的状态设置为“未更改”#39;或者&#39;修改&#39;如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,请使用&#39;添加&#39;方法或“添加”#39;实体状态跟踪图形,然后将非新实体的状态设置为“未更改”。或者&#39;修改&#39;酌情。

如何只添加组件的字段并保留对数据库中已存在的ComponentType,SourceResource和TargetResource的引用?

1 个答案:

答案 0 :(得分:0)

您需要添加引用而不是ID

认为这可以帮助您stack overflow