编辑现有实体并保存不会保存

时间:2013-12-08 02:56:22

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

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

这是我在我的存储库中的内容

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方法,则不会发生任何事情。

我还需要做些什么吗?

1 个答案:

答案 0 :(得分:0)

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

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

如果您知道某个实体已经存在于数据库中但可能已对其进行了更改,那么您可以告诉上下文附加实体并将其状态设置为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();
}