【问题标题】:Update entity with one to many list Entityframwork 5使用一对多列表实体框架 5 更新实体
【发布时间】:2014-03-31 22:11:38
【问题描述】:

我首先使用实体​​框架 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();
        }
}

我的最后一次尝试:

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

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

【问题讨论】:

  • 您是否遇到异常或其他情况?它似乎有效,但实体没有在数据库中更新?您确定 GetByExternalID() 不返回 null 吗?
  • 是的,没有更新。看起来它什么都不做。
  • 您确定 GetByExternalId 正在返回一个实体吗?如果在附加后设置 RequiredFeatures 会发生什么?

标签: c# sql-server entity-framework ef-code-first


【解决方案1】:

如果实体在数据库中不存在,那么您应该使用 Add 方法而不是 Attach。附加用于数据库中但不属于上下文的实体。 阅读this了解详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多