LINQ Submit Изменения не отправлять изменения - PullRequest
0 голосов
/ 01 октября 2008

Я использую LINQ to SQL и C #. У меня есть два класса LINQ: пользователь и сеть.

У пользователя есть UserID (первичный ключ) и NetworkID

Сеть имеет NetworkID (первичный ключ) и AdminID (идентификатор пользователя)

Следующий код работает нормально:

user.Network.AdminID = 0;
db.SubmitChanges();

Однако, если я получу доступ к AdminID до внесения изменения, изменение никогда не произойдет с БД. Таким образом, следующее не работает:

if(user.Network.AdminID == user.UserID)
{
     user.Network.AdminID = 0;
     db.SubmitChanges();
}

Он включается в оператор if и вызывает submit. По какой-то причине изменения в AdminID никогда не вносятся в БД. Ошибка не выдается, изменение просто никогда не «принимает».

Есть идеи, что может быть причиной этого?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 01 октября 2008

Я только что провел быстрый тест, и он отлично работает для меня.

Мне неприятно спрашивать об этом, но вы уверены, что выражение if когда-нибудь вернет истину? Возможно, вы просто не нажали код, который меняет значение.

Кроме этого нам может понадобиться больше информации. Каковы свойства этого члена? Проследили ли вы в операторе set, чтобы убедиться, что значение устанавливается перед вызовом SubmitChanges? Есть ли у сущности Linq новое значение после SubmitChanges? Или и база данных, и сущность Linq не могут принять новое значение?

Короче говоря, этот код должен работать ... поэтому что-то еще где-то, вероятно, не так.

0 голосов
/ 27 июля 2010

У меня была эта проблема. Причиной была одна глупая строка кода:

DBDataContext db { get { return new DBDataContext(); } }

очевидно, это должно быть:

DBDataContext db = new DBDataContext();
0 голосов
/ 01 октября 2008

Вот оригинал пост .


Вот установщик, сгенерированный конструктором LinqToSql.

Фрагмент кода

{
  Contact previousValue = this._Contact.Entity;
  if (((previousValue != value)
    || (this._Contact.HasLoadedOrAssignedValue == false)))
  {
    this.SendPropertyChanging();
    if ((previousValue != null))
    {
      this._Contact.Entity = null;
      previousValue.ContactEvents.Remove(this);
    }
    this._Contact.Entity = value;
    if ((value != null))
    {
      value.ContactEvents.Add(this);
      this._ContactID = value.ID;
    }
    else
    {
      this._ContactID = default(int);
    }
    this.SendPropertyChanged("Contact");
  }
}

Эта строка устанавливает свойство потомка для родителя.

this._Contact.Entity = value;

Эта строка добавляет дочерний элемент в коллекцию родителей.

value.ContactEvents.Add(this);

Установщик для идентификатора не имеет этой второй строки.

Итак, с автоматически сгенерированными сущностями ... Этот код вызывает неожиданное поведение:

myContactEvent.ContactID = myContact.ID;

Этот код хорош:

myContactEvent.Contact = myContact;

Этот код также хорош:

myContact.ContactEvents.Add(myContactEvent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...