gpt4 book ai didi

c# - 无法更新实体中的外键

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:16 26 4
gpt4 key购买 nike

这些是我的模型:

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; }
}

以及 Action :

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

最佳答案

据我所知,这似乎是因为您没有使用 View 模型中的 ThumbnailId。下面是填充 Thumbnail 的一种方法:

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

此外,创建新帖子时它的作用是什么意思?缩略图是用非空值创建的吗?

关于c# - 无法更新实体中的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34483746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com