C# Can';t更新实体中的外键

C# Can';t更新实体中的外键,c#,asp.net,asp.net-mvc,entity-framework,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

这些是我的模型:

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);
    }
问题是,当我尝试更新
缩略图
属性时,它不会对数据库进行任何更改
SaveChanges
方法返回1(即使缩略图是唯一修改的属性)。即使我试图将其设置为null。创建新帖子时,一切正常。但编辑是行不通的。 有什么问题?有没有更好的解决方案可以在一个操作中处理添加/更新操作


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

据我所见,这似乎是因为您没有从视图模型中使用
ThumbnailId
。下面是一种填充
缩略图的方法:

public void SetViewModelValues(CreatePostViewModel viewModel)
{
    Title = viewModel.Title;
    Thumbnail = viewModel.ThumbnailId != null ? db.Images.Find(viewModel.ThumbnailId) : null;
}

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

我仍然不知道为什么会发生这种情况,但我删除了数据库中的所有表并重新创建了它们。现在它开始工作了。

您如何处理
ThumbnailId
?您确定
ModelState
有效吗?缩略图被转换为数据库中的哪种列类型?对于第二个问题,您可以使用Automapper解决:
ModelState
是有效的,我确信。在我的数据库中有一个从
Image
类创建的
Images
ThumbnailId
是该表的外键,因此我使用它来查找该表中的
图像。但它并不像简单地将
Thumbnail
设置为null那样有效。我的意思是,它在您的(可见)代码中没有积极参与。当添加新帖子(而不是编辑现有帖子)时,Thumbnail被正确设置(设置为null或某个有效图像)。在
SetViewModelValues
CreatePost
中设置它有什么区别?我什么也看不见。