2014-07-01 18 views
1

我想更新兩個表使用實體框架,但它顯示錯誤:「實體類型<> f__AnonymousType3`4不是當前上下文的模型的一部分。更新操作顯示實體框架中的錯誤

protected void Button3_Click(object sender, EventArgs e) 
    { 
     var obj = Convert.ToInt32(TextBox5.Text); 
     var v = (from m in de.t1 
       join n in de.t2 
       on m.Id equals n.id 
       where m.Id == obj 
       select new { m.Name,m.Age,m.Address,n.salary}).FirstOrDefault(); 
     if (v != null) 
     { 
      t1 t = new t1 
      { 
       Name = TextBox1.Text, 
       Age = Convert.ToInt32(TextBox2.Text), 
       Address = TextBox3.Text, 
       t2 = new t2 
       { 
        salary = Convert.ToInt64(TextBox4.Text) 
       } 
      }; 
     de.Entry(v).State = System.Data.Entity.EntityState.Modified; 
     de.SaveChanges(); 
     } 

    } 

回答

1

v是不是你的實體之一。你的意思是de.Entry(t).State

您可以通過採取強類型集合的優勢,而不是調用db.Entry()一切避免這種對未來的錯誤:

if (v != null) 
    { 
     t1 t = new t1 
     { 
      Name = TextBox1.Text, 
      Age = Convert.ToInt32(TextBox2.Text), 
      Address = TextBox3.Text, 
      t2 = new t2 
      { 
       salary = Convert.ToInt64(TextBox4.Text) 
      } 
     }; 
     // de.Entry(t).State = System.Data.Entity.EntityState.Added; 
     de.t1.Add(t); 
     de.SaveChanges(); 
    } 
+0

我甚至試圖de.Entry(T).STATE但其表現「名字't'在當前上下文中不存在」。 – user3409204

+0

@ user3409204:這是因爲''t'是在你的'if'塊中聲明的,並且你試圖在該塊之外使用它。查看我的更新。 – StriplingWarrior

+0

我在代碼中做了一些更改。現在我需要使用特定的列id來更新數據庫。但仍然顯示一些錯誤 – user3409204