簡體   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