2013-08-19 58 views
0

喜重複的結果,我使用下面的代碼來獲取用戶ID存在於Gateway_users表Appterms表。但問題是,每當我運行解決方案我得到重複記錄,這是第一次100個記錄與ID和第二次200記錄與重複的ID等。如何避免讓實體框架

public class HomeController : Controller 
    { 
    private AppMarketplaceEntities db = new AppMarketplaceEntities(); 
    private InstallTrackerEntities db1 = new InstallTrackerEntities(); 

    public ActionResult Index() 
    {  
    List<int> gatewayUserId = new List<int>(); 

     using (var ctx = new InstallTrackerEntities()) 
     { 
      gatewayUserId = ctx.Gateway_Users.Select(f => f.GatewayuserUID).ToList(); 
     } 
     using (var ctx2 = new AppMarketplaceEntities()) 
     { 
      foreach (var id in gatewayUserId) 
      { 

       ctx2.AppTerms.Add 
        (new AppTerm(){ GatewayuserUID = id }); 
      } 
      ctx2.SaveChanges(); 
     } 

     return View(); 
    } } } 

那麼什麼樣的變化我必須做出上面的代碼來獲得唯一的ID是存在於Gateway_users表,它應該只取一次,而不是重複的記錄。

+0

什麼是'GatewayuserUID'和它在哪兒定義? –

+0

@KarlAnderson它是已經註冊的用戶標識,它在名爲Gateway_users的表中,並且我已經擁有ID的用戶。現在,我需要將其複製到具有與GatewayuserUID完全相同的列名稱的Terms表中。但是當我使用上面的代碼時,每當我將ID填充到導致重複記錄的表中時。 – Dev

+1

你的意思是'gatewayUserId'集合在查詢後包含重複值(很難相信'GatewayuserUID'是主鍵),還是你的意思是'AppTerms'表被填滿了具有相同'GatewayuserUID '(因爲每次進入索引操作時插入新記錄都不奇怪)? – Slauma

回答

2

正在發生的事情是,你一直在增加的InstallTrackerEntities GatewayuserUID列表中AppMarketplaceEntities AppTerms列表和你想要的是隻插入新的。

第一,如果你想刪除的那些浩InstallTrackerEntities不再存在的最簡單的方法是隻清除AppTerms表並插入新的列表作爲託尼·倫特說。

剛剛插入的那些豪是新已經在AppMarketplaceEntities創造者的名單,只插入那些不存在

using (var ctx = new InstallTrackerEntities()) 
    { 
     gatewayUserId = ctx.Gateway_Users.Select(f => f.GatewayuserUID).ToList(); 
    } 
    using (var ctx2 = new AppMarketplaceEntities()) 
    { 
     var appTermsUIDs = ctx2.AppTerms.Select(f => f.GatewayuserUID).ToList(); 

     foreach (var id in gatewayUserId.Where(e => !appTermsUIDs.Contains(e))) 
     { 
      ctx2.AppTerms.Add(new AppTerm(){ GatewayuserUID = id }); 
     } 
     ctx2.SaveChanges(); 
    } 
+0

嗨佩德羅,我用你的解決方案,它究竟worked.what我沒有是你告訴我跑我前面的代碼只有一次剛剛從gateway_users插入GatewayUserId的所有記錄,以appterms GatewayUserId.After我評論說,代碼和我使用你的解決方案。現在我不能看到任何重複的記錄。所以當下一次在gateway_users中有一個新的記錄GatewayUserId時,它會在appterms表中更新也是正確的? – Dev

+0

@Dev是的,它會的,你不需要運行你的代碼,就好像AppTerms是空的一樣,所有的記錄都會被插入。 –

+0

在上面的代碼中我們沒有提到InstallTrackerEntities數據庫。但是當新用戶註冊時,他們的GatewayUserId將被存儲在這個數據庫中。那麼它將如何將這個新ID複製到Appterms表中?你能解釋一下嗎? – Dev

0

你需要清除你的第二個表(ctx2.AppTerms)如果你想只接收新的ID的每一次。否則,你只是在舊數據之上附加新數據。這將解釋「重複」。對於這個例子,看到這個答案:https://stackoverflow.com/a/15220460/1634770。基本上,你需要做這樣的事情:

var objCtx2 = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)ctx2).ObjectContext; 
objCtx2.ExecuteStoreCommand("TRUNCATE TABLE AppTerms"); 
+0

但這將在該表中刪除所有行。但我想要將Gateway UserUID中存在的所有數據提取到Term表中,其中有名爲GatewayuserUID的列。現在我能夠做到這一點,但與此我得到重複記錄。所以我怎麼能避免這一點? – Dev

相關問題