【问题标题】:How did I wrong my DataContext?我怎么弄错了我的 DataContext?
【发布时间】:2012-03-10 02:22:20
【问题描述】:

我使用 LINQ To SQL 已经有一段时间了,我通常在解决方案中执行以下操作:

  • 在一个项目中,我创建了一个 dbml 模式。
  • 在另一个项目中,我创建了一个简单的 DataAccessLayer (DAL),它知道我的第一个项目,并实例化了一个 DataContext。
  • 在第三个项目(业务逻辑)中,我实例化了我的 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); 时,我得到一个错误:

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

【问题讨论】:

  • 您是否尝试过清理并重建您的解决方案以确保所有依赖项都更新?此外,如果您更改底层数据库,您需要通过删除和重新添加 dbml 表面上的表来更新您的 dbml 文件。
  • 是的,我确实尝试过这样做。当我看到它不起作用时,我删除了我的整个 .dbml 并创建了一个新的,只是为了确保使用不同的名称,我得到了同样的东西。我忘了提到我意识到的另一个“奇怪”的事情。我现在正在编辑我的帖子以包含该观察结果。
  • 终于成功了...我删除了我的 linq-to-sql 对象,清理了我的解决方案,关闭了我的 IDE,重新打开了解决方案,重新创建了对象,现在它们正确生成了(以及我在编辑中写的错误消失了)。我应该怎么处理我的问题?只是简单的删除,因为它不是编程错误,而是 IDE 故障?
  • 您应该为自己的问题添加足够详细的答案,以便遇到相同问题的人可以从中学习。

标签: c# linq-to-sql datacontext


【解决方案1】:

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

【讨论】:

  • 是的,设计师出了点问题,每次我从数据库生成对象时,它都不会设置任何约束。
【解决方案2】:

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

  1. 删除错误的对象。
  2. 关闭 Visual Studio。
  3. 重新打开 Visual Studio。
  4. 重新创建对象。

不做第一站,而是通过更改参数来重新生成对象可能有效,但我无法测试它,因为我不知道如何重现问题。

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多