【问题标题】:Editing existing entity and saving doesn't save编辑现有实体并保存不保存
【发布时间】:2013-12-08 02:56:22
【问题描述】:

我在尝试保存现有实体对象时遇到问题 - 它只是没有保存它。

这是我的存储库中的内容

private MyEntities _entities;

public EFUserFoldersRepository(MyEntities entities)
{
    _entities = entities;
}

public void SaveUserFolder(UserFolder userFolder)
{
    if (userFolder.UserFolderID == 0)         // new user folder
        _entities.UserFolders.Add(userFolder);
    else
        _entities.UserFolders.Attach(userFolder);

    _entities.SaveChanges();
}

如果我正在创建一个文件夹,这工作正常,对象被创建。但是,如果我正在编辑现有文件夹并使用 Attach 方法,则不会发生任何事情。

我还需要在这里做些什么吗?

【问题讨论】:

    标签: c# asp.net entity-framework entity-framework-5


    【解决方案1】:

    您需要将上下文条目 .State 属性设置为 EntityState.Modified,如下例所示:

    将现有但已修改的实体附加到上下文

    如果您知道某个实体已经存在于数据库中但可能已对其进行了更改,那么您可以告诉上下文附加该实体并将其状态设置为已修改。例如:

    var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" };
    
    using (var context = new BloggingContext())
    {
        context.Entry(existingBlog).State = EntityState.Modified;
    
        // Do some more work... 
    
       context.SaveChanges();
    }
    

    示例取自这里:http://msdn.microsoft.com/en-us/data/jj592676.aspx

    您的 SaveUserFolder 将如下所示:

    public void SaveUserFolder(UserFolder userFolder)
    {
        if (userFolder.UserFolderID == 0)         // new user folder
            _entities.UserFolders.Add(userFolder);
        else
        {
            _entities.UserFolders.Attach(userFolder);
            _entities.Entry(userFolder).State = EntityState.Modified;
        }
    
        _entities.SaveChanges();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      相关资源
      最近更新 更多