0

嗨,我正在使用以下代码将 Gateway_users 表中的用户 ID 提取到 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();  
     } } }

因此,我必须对上述代码进行哪些更改才能仅获取 Gateway_users 表中存在的 ID,并且它应该只获取一次而不是重复记录。

4

2 回答 2

2

发生的事情是您总是将 InstallTrackerEntities GatewayuserUID 列表添加到 AppMarketplaceEntities AppTerms 列表中,而您想要的只是插入新的。

首先,如果要删除 InstallTrackerEntities 中不再存在的那些,最简单的方法是清除 AppTerms 表并插入新列表,如 Tony Lunt 所说。

只插入那些是新的,创建一个已经在 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();
    }
于 2013-08-19T15:48:47.490 回答
0

如果您希望每次都只接收新 ID,则需要清除第二个表 (ctx2.AppTerms)。否则,您只是在旧数据之上附加新数据。这将解释“重复”。有关此示例,请参阅此答案:https ://stackoverflow.com/a/15220460/1634770 。基本上,您需要执行以下操作:

var objCtx2 = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)ctx2).ObjectContext;
objCtx2.ExecuteStoreCommand("TRUNCATE TABLE AppTerms");
于 2013-08-19T15:10:47.277 回答