代码之家  ›  专栏  ›  技术社区  ›  Christina Mayers

linq to sql:插入而不是更新

  •  2
  • Christina Mayers  · 技术社区  · 15 年前

    我现在很长时间都被这个问题困扰着。

    我所要做的就是在我的数据库中插入一行,如果这是新的信息——如果不是更新现有的信息。

    我以前更新过我生活中的许多实体-但是这段代码有什么问题是我无法理解的(可能是一些非常基本的东西) 我想我看不见树木的树林…

    private Models.databaseDataContext db = new Models.databaseDataContext();
    
    internal void StoreInformations(IEnumerable<EntityType> iEnumerable)
    {
     foreach (EntityType item in iEnumerable)
     {
      EntityType type = db.EntityType.Where(t => t.Room == item.Room).FirstOrDefault();
      if (type == null)
      {
       db.EntityType.InsertOnSubmit(item);
      }
      else
      {
       type.Date = item.Date;
       type.LastUpdate = DateTime.Now();
       type.End = item.End;
      }       
     }
    }
    
    internal void Save()
    {
     db.SubmitChanges();
    }
    

    编辑: 刚刚检查了变更集,没有更新,只有插入。 现在我已经和

    foreach (EntityType item in iEnumerable)
    {
        EntityType type = db.EntityType.Where(t => t.Room == item.Room).FirstOrDefault();
        if (type != null)
        {
            db.Exams.DeleteOnSubmit(type);
        }
        db.EntityType.InsertOnSubmit(item);
    }
    

    但我很想更新并丢失这些不必要的删除语句。

    3 回复  |  直到 15 年前
        1
  •  0
  •   Aaron Daniels    15 年前

    你不想要吗 item.Room 而不是 iEnumerable.Room ?

        2
  •  0
  •   Community CDub    8 年前

    我想知道您是否因为这里讨论的问题而遇到问题: Why can't I change elements from a linq IEnumerable in a for loop?

    测试它的一种方法是传入EntityType列表,而不是像这样传递IEnumerable:

    internal void StoreInformations(IList<EntityType> iEnumerable)
    {
    ...
    }
    
        3
  •  0
  •   Christina Mayers    15 年前

    好吧,我弄明白了为什么它不能像我预期的那样工作。

    function Stuff()
    {    
        Wrapper x = new Wrapper();
        Type a = new Type();
        InsertType(a);
        x.Type = a;
        InsertOnSubmit(x);
    }
    
    function InsertType (Type a)
    {
        InsertOnSubmit(a);
    }
    

    因为X中的A仍然是相同的,所以A将再次插入-它仍然是新的。 不知怎么的,我认为它们被引用了,本质上是一样的。

    当我先删除旧记录时,我还没有考虑为什么它会起作用。别再浪费时间了。 进入新世界(EF4或NHibernate)!