Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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# 在asp mvc的编辑方法中将新实体添加到列表属性_C#_Asp.net Mvc_Entity Framework_Model View Controller - Fatal编程技术网

C# 在asp mvc的编辑方法中将新实体添加到列表属性

C# 在asp mvc的编辑方法中将新实体添加到列表属性,c#,asp.net-mvc,entity-framework,model-view-controller,C#,Asp.net Mvc,Entity Framework,Model View Controller,我有一个有子实体列表的实体 在编辑模式下,我需要向列表中添加一些子实体。 但我在运行时遇到了这个错误: 附加“ResturanCmsAdmin.Models.Image”类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态跟踪图形,然后根据需

我有一个有子实体列表的实体

在编辑模式下,我需要向列表中添加一些子实体。 但我在运行时遇到了这个错误:

附加“ResturanCmsAdmin.Models.Image”类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”

我的实体和编辑代码如下所示

public partial class Image
{
    public Image()
    {
        this.News = new HashSet<News>();
    }
    public int ID { get; set; }
    public string Text { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<News> News { get; set; }
}

我认为问题是因为您试图从导航属性检索实体ˋNews'。你需要一个查询,比如vvar item =db.图像。包含(n=> n.New)。考虑使用Add方法,而不是改变状态。此外,您还可以在不收集新闻的情况下更新图像实体,然后对每个新闻项进行迭代。正如错误消息所示,问题似乎出在图像实体上。最可能的问题是您尝试跟踪的映像实例已被您的db实例跟踪。你能提供更多关于如何在这个方法中传递db实例的信息吗?谢谢大家的回答。我通过视图模型解决它,并通过代码添加新的子实体。
public ActionResult Edit( Image image)
{
    if (ModelState.IsValid)
    {
        foreach (var item in image.News)
        {
            item.ImageID = image.ID;

            if (item.ID == 0)
                db.Entry(item).State = EntityState.Added;
            else
                db.Entry(item).State = EntityState.Modified;

        }
        db.Entry(image).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(image);
}