C# 使用一对多列表Entityframwork 5更新实体

C# 使用一对多列表Entityframwork 5更新实体,c#,sql-server,entity-framework,ef-code-first,C#,Sql Server,Entity Framework,Ef Code First,我首先使用entity framework 5代码。 我创建了一个包含一个集合的实体。 我尝试了所有方法,但没有找到如何更新此实体 public class TaskExtention { public TaskExtention() { RequiredFeatures = new HashSet<FeatureTaskRequirment>(); } [Key] [Datab

我首先使用entity framework 5代码。 我创建了一个包含一个集合的实体。 我尝试了所有方法,但没有找到如何更新此实体

public class TaskExtention
{
        public TaskExtention()
        {
            RequiredFeatures = new HashSet<FeatureTaskRequirment>();
        }

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
        public int Id { get; set; }

        public int ExternalSystemId { get; set; }

        public ICollection<FeatureTaskRequirment> RequiredFeatures { get; set; }

        public override bool Equals(object obj)
        {
            var other = obj as TaskExtention;
            if (other == null)
            {
                return false;
            }

            return Id == other.Id;
        }

        public override int GetHashCode()
        {
            return Id.GetHashCode();
        }
}

请帮助我了解如何更新该实体。

如果该实体在数据库中不存在,则应使用Add方法而不是Attach。附加用于数据库中但不属于上下文一部分的实体。
详细信息请阅读。

您是否遇到异常或其他情况?它似乎可以工作,但实体并没有在数据库中更新吗?您确定GetByExternalID()没有返回null吗?是的,没有更新。看起来好像什么都不做。你确定GetByExternalId正在返回一个实体吗?如果在附加后设置RequiredFeatures,会发生什么情况?
using (var db = GetContext())
{
     TaskExtention currTask = GetByExternalID(ExternalID);
     if (currTask != null)
     {
        currTask.RequiredFeatures = FeatuersToUpdate;
        db.TaskExtentions.Attach(currTask);
        db.Entry(currTask).State = EntityState.Modified;
        db.SaveChanges();
     }
}