我一直在使用LINQ To SQL一段时间了,我通常在解决方案中做的是:
这通常很有效。但是,这次,我不知道为什么,但“它”不起作用。 “它”是“我更新数据库”。我改变了我的代码做了一些测试,我得到了一个我不明白的结果。
MyDataContext dataContext = new MyDataContext(MyConnectionString);
DataBaseItem dbi = (from item in dataContext.DataBaseItems
where item.ID == 1
select item).First();
dbi.Name= "toto";
// dataContext.GetChangeSet() tells me nothing changed.
我深入挖掘bdi.Name = "toto";
并将其与项目中的类似值赋值进行比较(它们都是设计器生成的代码),并看到一些代码丢失了(我在那里写下来,但我评论他们,所以你看到缺少的东西):
[Column(Storage="_Name", DbType="NVarChar(250)")]
public string Name
{
get
{
return this._Name;
}
set
{
if ((this._Name!= value))
{
//this.OnLayoutChanging(value);
//this.SendPropertyChanging();
this._Name= value;
//this.SendPropertyChanged("Name");
//this.OnLayoutChanged();
}
}
}
任何人都可以告诉我这些线路是如何丢失的,我在哪里搞砸了?
当我dataContext.Refresh(RefreshMode.KeepChanges, dataContext.DataBaseItems);
时,我收到错误:
无法识别为刷新指定的对象。
答案 0 :(得分:3)
如果您的对象没有主键,则不会跟踪对象的更改。可能的ID未在dbml中设置为主键。
答案 1 :(得分:1)
错误发生在IDE(VS2008)中。 IDE生成或重新生成任何Linq-to-Sql对象都是错误的。要解决这个问题,我不得不:
不进行第一次停止,而是通过更改参数重新生成对象可能有效,但我无法测试它,因为我不知道如何重现问题。