1 public class UserClazz 2 { 3 public User User{get;set;} 4 public IList<Product> ProductList{get;set;} 5 } 6 7 public class User 8 { 9 public IList<Product> ProductList{get;set;} 10 public IList<UserClazz> UserClazzList{get;set;} 11 } 12 13 public class Product 14 { 15 public UserClazz UserClazz{get;set;} 16 public User User{get;set;} 17 }
這是互相關聯的三個表。
在使用EF更新時出現“無法定義這兩個對象之間的關系,因為它們附加到不同的 ObjectContext 對象。”及“ 一個實體對象不能由多個 IEntityChangeTracker 實例引用。”
這兩個異常。
更新的代碼是:
public void Update(int id,int ucId) { try { var product=ProductSer.QueryById(id); product.UserClazz=UserClazzSer.QueryById(ucId); var reuslt=ProductSer.EditProduct(product); } catch(Exception ex) { throw new Exception(ex.Message); } } public bool EditProduct(Product product) { blogRep.Update(blog); blogRep.SaveChange();//在這出錯 }
后來百度,GOOGLE了一天,終於理解了異常的真正原因,請原諒我的愚笨...
public void Update(int id,int ucId) { try { var product=ProductSer.QueryById(id); product.UserClazz=UserClazzSer.QueryById(ucId);
//添加這句 product.User=UserSer.QueryById(product.User.Id); var reuslt=ProductSer.EditProduct(product); } catch(Exception ex) { throw new Exception(ex.Message); } }
我的理解是,在獲取product時候由於飢餓加載將product中的User也加載出來了,而在更新的時候,Context中的product.User不與第一次加載中的數據相同,所以要重新加載一次,也就是其他人說的:數據要來源於查詢,不是數據本身。
原諒小弟的拙見...