无法更新实体中的外键

时间:2015-12-27 18:58:30

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

这些是我的模特:

public class Post
{
    [Key]
    public int Id { get; set; }

    public string Title { get; set; }

    [DefaultValue(null)]
    public virtual Image Thumbnail { get; set; }

    public void SetViewModelValues(CreatePostViewModel viewModel)
    {
        Title = viewModel.Title;
    }
}

public class CreatePostViewModel
{
    public string Title { get; set; }

    public int? ThumbnailId { get; set; }
}

行动:

    public ActionResult CreatePost(CreatePostViewModel postViewModel, int? id)
    {
        Post post;

        if (id != null)
        {
            post = dbWebContent.Posts.Find(id);
            if (post == null)
                return HttpNotFound();
        }
        else
        {
            post = new Post();
        }

        if (!ModelState.IsValid)
            return View(post);

        post.SetViewModelValues(postViewModel);
        post.Thumbnail = null; // Even setting null doesn't work

        var state = (post.Id == 0) ? EntityState.Added : EntityState.Modified;
        dbWebContent.Entry(post).State = state;

        if (dbWebContent.SaveChanges() > 0)
        {
            ViewBag.Success = true;
            return View(post);
        }

        ViewBag.ErrorMessage = "Error!";
        return View(post);
    }

问题在于,当我尝试更新Thumbnail属性时,它不会对数据库进行任何更改。 SaveChanges方法返回1(即使Thumbnail是唯一的修改属性)。即使我尝试将其设置为null。创建新帖子时一切正常。但编辑不起作用。 问题是什么?有没有更好的解决方案来处理一个操作中的添加/更新操作?

这些不是Post类中的所有属性(没有其他外键)。第二个问题是:有没有更好的方法从视图模型创建实体?我的意思是我需要将所有这些属性值存储在两个单独的对象中,然后将它从视图模型复制到实体,还是有更漂亮的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

从我看到的情况来看,似乎是因为您未在视图模型中使用10。这是填充ThumbnailId

的一种方法
Thumbnail

另外,在创建新帖子时,你的意思是什么?缩略图是使用非空值创建的吗?

答案 1 :(得分:0)

我仍然不想为什么会这样,但我删除了数据库中的所有表并重新创建它们。现在它正在发挥作用。