2016-05-16 25 views
0

在我的項目中,我有兩個單獨的具有單獨實體上下文的服務器,首先我從一臺服務器獲取數據並通過此代碼將其保存到列表中:同時使用來自兩個不同服務器的兩個實體上下文

BarForooEntities1 bfe = new BarForooEntities1(); 
SaleHistory sh = new SaleHistory(); 
RadifsSendCenter rs = new RadifsSendCenter(); 
BaskoolEntities be = new BaskoolEntities(); 
var q = (from d in bfe.RadifsSendCenter 
    where d.Daryaft == true 
    orderby d.id_rec 
    select d).ToList(); 

然後,我通過使用此代碼保存列表到另一臺服務器數據庫:

foreach (var v in q) 
     { 
      sh.id_rec = v.id_rec; 
      sh.Radifkolsal = v.Radifkolsal; 
      sh.Dates = v.Dates; 
      sh.DateErsal = v.DateErsal; 
      sh.TimeErsal = v.TimeErsal; 
      sh.Karkhane = v.Karkhane; 
      sh.Namekala = v.Namekala; 
      sh.Vazn = v.Vazn; 
      sh.Bandal = v.Bandal; 
      sh.Dobaskul = v.Dobaskul; 
      sh.OldYear = v.OldYear; 
      sh.Sal = v.Sal; 
      sh.del = v.del; 
      sh.edit = v.edit; 
      sh.Daryaft = v.Daryaft; 
      sh.Shobe = v.Shobe; 
      sh.Greid = v.Greid; 
      sh.TedadBas = v.TedadBas; 
      sh.Rahgiry = v.Rahgiry; 
      sh.Tozih = v.Tozih; 
      sh.NoeShemsh = v.NoeShemsh; 
      sh.Metrazh = v.Metrazh; 
      sh.Keyfiat = v.Keyfiat; 
      sh.Address = v.Address; 
      sh.City = v.City; 
      sh.Karbar = v.Karbar; 
      sh.CodeKala = v.CodeKala; 
      sh.CodeGoruh = v.CodeGoruh; 
      sh.CodeKG = v.CodeKG; 
      sh.CodeGreid = v.CodeGreid; 
      sh.Tel = v.Tel; 
      sh.ShenaseMeli = v.ShenaseMeli; 
      sh.Sefaresh = v.Sefaresh; 
      sh.Tolid = v.Tolid; 
      sh.Shenase = v.Shenase; 
      var u = (from bu in be.BarbariUsers 
       where bu.UserName == Login.username 
       select bu).FirstOrDefault(); 
      sh.UserID = u.UserID; 
      sh.ReceiveUser = Login.username; 
      sh.ReceiveDateTime = DateTime.Now; 
      be.SaleHistory.Add(sh); 
      rs.Daryaft = false; 
     } 
be.SaveChanges(); 
bfe.SaveChanges(); 
MessageBox.Show("Done!"); 

當我跑我的項目,一切工作,但名單中只有一個行被添加到第二個列表,也更新第一個數據庫值(rs.Daryaft = false;)不會改變任何事情G。 我知道,如果我在foreach循環中移動(be.SaveChanges();)和(bfe.SaveChanges();),只需要第一個工作需要很長時間,第二個工作不會做任何事情。也許我會走錯路。 任何建議或其他解決方案來解決這個問題?

+0

您應該在循環內創建新對象。 –

+0

我做到了,但有時它有效,有時不適用。我完全糊塗了。 – kavir

+0

您應該製作一個[簡短,自包含,可編譯的示例](http://sscce.org/),它可以重現您的問題,所以我們有一些工作要做。 –

回答

0

Finlay我解決了我自己的問題。這是編輯的代碼,可能對某人有用:

BaskoolEntities be = new BaskoolEntities(); 
BarForooEntities1 bfe = new BarForooEntities1(); 
var q = (from d in bfe.RadifsSendCenter 
    where d.id_rec > last 
    orderby d.id_rec 
    select new 
       {d.id_rec,d.Radifkolsal,d.Namekala,d.Vazn,d.Bandal,d.Greid,d.TedadBas,d.Tozih,d.NoeShemsh,d.Metrazh,d.Keyfiat,d.Address,d.City,d.Tel,d.ShenaseMeli,d.Sefaresh,d.Tolid,d.Shenase 
        }).ToList(); 
     { 
foreach (var v in q) 
      { 
       RadifsSendCenter s = new RadifsSendCenter(); 
       SaleHistory sh = new SaleHistory(); 
       sh.id_rec = v.id_rec; 
       sh.Radifkolsal = v.Radifkolsal; 
       sh.Namekala = v.Namekala; 
       sh.Vazn = v.Vazn; 
       sh.Bandal = v.Bandal; 
       sh.Greid = v.Greid; 
       sh.TedadBas = v.TedadBas; 
       sh.Tozih = v.Tozih; 
       sh.NoeShemsh = v.NoeShemsh; 
       sh.Metrazh = v.Metrazh; 
       sh.Keyfiat = v.Keyfiat; 
       sh.Address = v.Address; 
       sh.City = v.City; 
       sh.Tel = v.Tel; 
       sh.ShenaseMeli = v.ShenaseMeli; 
       sh.Sefaresh = v.Sefaresh; 
       sh.Tolid = v.Tolid; 
       sh.Shenase = v.Shenase; 
       var u = (from bu in be.BarbariUsers 
        where bu.UserName == Login.username 
        select bu).FirstOrDefault(); 
       sh.UserID = u.UserID; 
       sh.ReceiveUser = Login.username; 
       sh.ReceiveDateTime = DateTime.Now; 
       var b= (from h in bfe.RadifsSendCenter 
        where h.id_rec == q.id_rec 
        select h).FirstOrDefault(); 
       b.Daryaft = false; 
       be.SaleHistory.Add(sh); 
      } 
    be.SaveChanges(); 
    bfe.SaveChanges(); 
    } 
    MessageBox.Show("Done!"); 
    } 
相關問題