Я уже некоторое время работаю с 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);
, получаю ошибку:
Объект, указанный для обновления, не распознается.