【发布时间】: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