LINQ to Sql:插入而不是更新

时间:2010-05-23 19:48:58

标签: c# linq-to-sql

我很长时间以来都遇到过这个问题。

我尝试做的每件事都是在我的数据库中插入一行,如果它是新信息 - 如果没有更新现有的那一行。

我之前已经更新了很多实体 - 但是这段代码出了什么问题超出了我的范围(可能是非常基本的东西) 我想我看不到树木了......

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();
}

修改 刚检查了ChangeSet,没有更新只插入。 现在我已经和

结婚了
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 个答案:

答案 0 :(得分:0)

您不希望item.Room代替iEnumerable.Room吗?

答案 1 :(得分:0)

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

测试它的一种方法是传入一个EntityType列表而不是IEnumerable:

internal void StoreInformations(IList<EntityType> iEnumerable)
{
...
}

答案 2 :(得分:0)

好吧,我找出了为什么它不像我预期的那样工作。

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

function InsertType (Type a)
{
    InsertOnSubmit(a);
}

因为in x仍然是相同的,所以第二次插入它 - 它仍然是新的。 不知怎的,我认为它们被引用并且基本相同。

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