2008-09-30 2 views
0

Я использую LINQ to SQL и C#. У меня есть два класса LINQ: User and Network.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 и вызывает изменения отправки. По некоторым причинам изменения в AdminID никогда не попадают в базу данных. Ошибка не выбрасывается, изменение просто никогда не «берет».

Любая идея, что может быть причиной этого?

Спасибо.

ответ

2

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

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

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

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

0

Оригинал post.


Вот сеттер, созданный дизайнером 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); 

сеттера для ID не имеет эту вторую линии.

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

myContactEvent.ContactID = myContact.ID; 

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

myContactEvent.Contact = myContact; 

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

myContact.ContactEvents.Add(myContactEvent); 
0

Я имел этот вопрос. Причина была одна немая строка кода:

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

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

DBDataContext db = new DBDataContext(); 
Смежные вопросы