【发布时间】:2015-12-27 18:58:30
【问题描述】:
这些是我的模型:
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 是唯一修改的属性)。即使我尝试将其设置为空。创建新帖子时一切正常。但是编辑不起作用。
问题是什么?有没有更好的解决方案可以在一个操作中处理添加/更新操作?
这些不是我在Post 类中的所有属性(没有其他外键)。第二个问题是:有没有更好的方法从视图模型创建实体?我的意思是我是否需要将所有这些属性值存储在两个单独的对象中,然后将其从视图模型复制到实体,或者有什么更漂亮的方法可以做到这一点?
【问题讨论】:
-
你用
ThumbnailId做什么?你确定ModelState有效吗? -
Thumbnail 翻译成您数据库中的哪种列类型?对于第二个问题,您可以使用 Automapper:github.com/AutoMapper/AutoMapper
-
ModelState是有效的,我敢肯定。我的数据库中有Images表是从Image类创建的。ThumbnailId是该表的外键,因此我使用它在该表中查找Image。但它并不像将Thumbnail设置为 null 那样简单。 -
我的意思是它没有积极参与您的(可见)代码。
标签: c# asp.net asp.net-mvc entity-framework