我很长时间以来都遇到过这个问题。
我尝试做的每件事都是在我的数据库中插入一行,如果它是新信息 - 如果没有更新现有的那一行。
我之前已经更新了很多实体 - 但是这段代码出了什么问题超出了我的范围(可能是非常基本的东西) 我想我看不到树木了......
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);
}
但我很乐意做更新并丢失这些不必要的删除声明。
答案 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)!