關於:無法定義這兩個對象之間的關系,因為它們附加到不同的 ObjectContext 對象。個人解決方案


 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不與第一次加載中的數據相同,所以要重新加載一次,也就是其他人說的:數據要來源於查詢,不是數據本身。

原諒小弟的拙見...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM