![](/img/trans.png)
[英]Code First Entity Framework doesn't create one to many relationship
[英]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.