2012-02-20 103 views
1

如何爲嵌套屬性設置SetModifiedProperty ?,換句話說,我有一個實體作者,其實體擁有書籍集合,我只需要更改書名。SetModifiedProperty用於嵌套屬性

var existingAuthor = authors.FirstOrDefault(x => x.Id.Equals(authorId)); 
    var bestSellerBook = existingAuthor.Books.FirstOrDefault(x=> x.Id.Equals(bookId)); 
    existingAuthor.Name = "xxxxxxx"; 
    bestSellerBook.Name = "xxxxxxxxxxx"; 
    context.Authors.Attach(existingAuthor); 
    context.ObjectStateManager.GetObjectStateEntry(existingAuthor).SetModifiedProperty("Name"); 
    context.SaveChanges(); 

任何建議?

+0

你似乎改變了一本書,那麼爲什麼不紀念本書修改方式與作者相同嗎?我誤解你的問題? – hvd 2012-02-20 19:22:19

回答

0

你必須得到用於保存你的情況發生了變化=屬性必須是書中的實體對象狀態進入:

var existingAuthor = authors.FirstOrDefault(x => x.Id.Equals(authorId)); 
var bestSellerBook = existingAuthor.Books.FirstOrDefault(x=> x.Id.Equals(bookId)); 
bestSellerBook.Name = "xxxxxxxxxxx"; 
context.Authors.Attach(existingAuthor); 
context.ObjectStateManager.GetObjectStateEntry(bestSellerBook).SetModifiedProperty("Name"); 
context.SaveChanges(); 
+1

問題是我在同一時間修改2個實體(作者和書)。 – Jude 2012-02-20 19:26:15

+0

@ JAPT88那麼,您知道如何將作者標記爲已修改,並且您知道如何將書籍標記爲已修改。要將兩者都標記爲已修改,請先標記一個,然後標記另一個。 – hvd 2012-02-20 19:27:10

+0

正如@hvd所描述的那樣 - 如果您要修改多個實體或屬性(每個屬性粒度),則必須爲它們中的每個設置狀態。 – 2012-02-20 19:29:29