我怎么错了我的DataContext?

时间:2010-11-15 17:33:40

标签: c# linq-to-sql datacontext

我一直在使用LINQ To SQL一段时间了,我通常在解决方案中做的是:

  • 在项目中,我创建了一个dbml架构。
  • 在另一个项目中,我创建了一个知道我的第一个项目的简单DataAccessLayer(DAL),并实例化了一个DataContext。
  • 在第3个项目(业务逻辑)中,我实例化了我的DAL。

这通常很有效。但是,这次,我不知道为什么,但“它”不起作用。 “它”是“我更新数据库”。我改变了我的代码做了一些测试,我得到了一个我不明白的结果。

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);时,我收到错误:

  

无法识别为刷新指定的对象。

2 个答案:

答案 0 :(得分:3)

如果您的对象没有主键,则不会跟踪对象的更改。可能的ID未在dbml中设置为主键。

答案 1 :(得分:1)

错误发生在IDE(VS2008)中。 IDE生成或重新生成任何Linq-to-Sql对象都是错误的。要解决这个问题,我不得不:

  1. 删除错误的对象。
  2. 关闭Visual Studio。
  3. 重新打开Visual Studio。
  4. 重新创建对象。
  5. 不进行第一次停止,而是通过更改参数重新生成对象可能有效,但我无法测试它,因为我不知道如何重现问题。