我在数据库中有一个表,我正在使用LINQ to SQL检索,作为我处理的一部分,我想添加到此列表,然后使用新项目更新数据库+我所做的任何更改
我认为我能做的就是:
var list = (from item in db.Table
select item).ToList();
[do processing where I modify items & add to the list]
list = list.Distinct();
db.SubmitChanges();
发生的变化是修改发生(即SQL更新),但我添加到列表中的任何新项目都没有添加。
显然我做错了,修改&的正确方法是什么?添加到数据库实体列表,然后提交所有更新&插入
答案 0 :(得分:5)
列表毫无意义。它只是容纳DataContext知道的对象。我们需要确保DataContext知道新的。重要的是,当我们向DataContext发出警告时,它们不必完整:
Item item;
if (needNewOne)
{
item = new Item();
db.InsertOnSubmit(item);
}
else
{
item = list[i];
}
/// build new or modify existing item
/// :
db.SubmitChanges();
答案 1 :(得分:3)
您可以为它创建扩展方法:
static void EnsureInsertedOnSubmit<TEntity>( this Table<TEntity> table
,IEnumerable<TEntity> entities)
{ foreach(var entity in entities)
{ if ( table.GetModifiedMembers(entity).Length == 0
&& table.GetOriginalEntityState(entity) == default(TEntity))
{ table.InsertOnSubmit(entity);
}
}
}
然后你可以这样做:
var list = db.Table1.ToList();
list.Add(new Item());
db.Table1.EnsureInsertedOnSubmit(list);
db.SubmitChanges();
答案 2 :(得分:1)
您必须通过InsertOnSubmit添加新项目。
答案 3 :(得分:1)
你必须告诉LINQ在提交时插入新行,使用InsertOnSubmit:
db.InsertOnSubmit(newrow);
db.SubmitChanges();
您不需要新的DataContext,您可以使用您用于更新的那个。
删除DeleteOnSubmit(行)相同。但是,将会跟踪修改。