繁体   English   中英

实体框架6-一对多关系不想更新,但是可以创建作品

[英]Entity Framework6 - One to many relationship doesn't want to update, but create works

我遇到了一个无法解释的怪异问题。 我可以创建一个新实体并将其链接到他的外键,但是我无法更新。 这是我的代码

我的Post.cs实体:

public class Post(){
public int Id {get;set;}
public string Title {get;set;}
...
public int PostCategoryId {get;set;}
public virtual Category Category {get;set;}
}

我的Category.cs实体:

public class Category(){
public int Id {get;set;}
public string Title {get;set;}
...    
public virtual IList<Post> Posts {get;set;}
}

控制器中的更新方法:

[HttpPost]
public ActionResult EditPost(Post post) {
....
_repository.UpdatePost(post);

还有仓库中的UpdatePost方法:

public void UpdatePost(Post post){
var category = _db.Category.SingleOrDefault(x => x.Id == post.PostCategoryId);
post.Category = category;
// I clearly see that the post have the category in the object
_db.Entry(post).State = EntityState.Modified; 
_db.SaveChanges();

我的对象的每个属性都会更新,除非类别。

有没有人有办法解决吗 ?

非常感谢您,由于这个问题,我无法入睡:)

可能是您的Category变量命名为Category,它与类本身的名称完全相同。 尝试将其重命名为类别(小写)或PostCategory,看看是否有帮助。 否则可能是实体状态存在问题。 EntityState通常用于直接从视图模型带来更改的情况,而不是在手动更改对象的字段之后。

其实我想我知道那是什么。 您需要从数据库而不是类别中获取帖子。

Category category = _db.Category.SingleOrDefault(x => x.Id == post.PostCategoryId);
Post p = db.Post.SingleOrDefault() //whatever code you need to find the Post in the database
p.Category = category;
db.SaveChanges();

我仍然会删除EntityState行。

另外,我假设您只是在尝试更新SQL表的“ PostCategoryId”条目? 在这种情况下,您需要做的是:

Post p = db.Post.SingleOrDefault() //whatever code you need to find the Post in the database
p.PostCategoryId = post.PostCategoryId
db.SaveChanges();

Matt S.,也许我错了,但是,如果我从数据库获取帖子,那么我将不得不更新可能由用户更新的每个字段(实际上,Post实体中有10个属性)。 并且,PostCategoryId已更新,有关该字段的任何问题。 告诉我我是否错了,但我必须避免要求“类别”,但要在帖子中注明。 喜欢 :

var post.Category = _db.Category.SingleOrDefault(x => x.Id == post.CategoryId) 

我可以为此创建一个方法,并在每次需要检索与该帖子相关的类别实体时调用它。

但是我认为我可以将Category更新为“发布到帖子中”,并在需要时调用post.Category。 也许这是我的误会?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM