Обновление Linq to Sql не сохраняется в базе данных - PullRequest
1 голос
/ 08 января 2010

У меня стандартное обновление происходит через linq to sql, но данные не сохраняются в базе данных.

Я использую автоматически сгенерированный класс через конструктор файлов .dbml.

Ниже приведен оператор обновления:

public static void UpdateEmailsInWorkingTable(Guid emailGuid, string modifiedEmail)
{
        using (EmailDBDataContext DBContext = new EmailDBDataContext())
        {
            EmailAddress_Update EAUpdated = (from e in DBContext.EmailAddress_Updates
                                             where e.EmailGuid == emailGuid
                                             select e).SingleOrDefault();

            EAUpdated.EmailAddress = modifiedEmail;
            EAUpdated.IsValid = 'Y';
            EAUpdated.UpdateFlag = true;
            EAUpdated.LastChangedDtTm = DateTime.Now;
            try
            {
                DBContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
            }
            catch (ChangeConflictException ex)
            {
                // do stuff here
            }
        } 
}

Я просмотрел свой автоматически сгенерированный класс DataContext, и единственное явное отличие состоит в том, что в рассматриваемой таблице EmailAddress_Update не реализованы два интерфейса INotifyPropertyChanging иINotifyPropertyChanged, что делают другие автоматически сгенерированные объекты.

Я предполагаю, что это является причиной того, почему изменения не сохраняются, не так ли?

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

Спасибо ~

Ответы [ 2 ]

2 голосов
/ 08 января 2010

Я также разместил этот вопрос на MSDN здесь: MSDN Linq to Sql , если вы хотите увидеть ответы. Но я нашел часть причины, по которой код не генерируется.

Вот часть из моего ответа MSDN:

Я создал небольшую тестовую таблицу без первичного ключа и добавил ее в конструктор, и, конечно же, она не сгенерировала никаких методов Extensibility для этого экземпляра.

Итак, я добавил первичный ключ в ту же таблицу и заново добавил его в конструктор, и, конечно же, все методы расширяемости и события отслеживания изменений были сгенерированы.

Мой вопрос сейчас заключается в том, почему должен существовать первичный ключ для этого материала для автоматической генерации?

0 голосов
/ 12 января 2010

Хорошо, чтобы ответить на мой собственный вопрос: «Мой вопрос сейчас, почему должен существовать первичный ключ для этого материала для автоматической генерации?» Я нашел это в книге Pro LINQ, написанной Джо Джозефом С. Ратцем-младшим

Я читал, как обрабатывать представления по сравнению с таблицами, и он говорит это:

"Поскольку классы сущностей, сгенерированные для представлений, не содержат свойств классов сущностей, которые отображаются как первичные ключи, они доступны только для чтения. Если учесть, что без первичных ключей DataContext не имеет эффективного способа обеспечить отслеживание идентификации, имеет смысл. "

Тайна и проблема решены.

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