InsertOnSubmit Линка не добавлен в набор изменений - PullRequest
3 голосов
/ 02 ноября 2009

Относится к Как отладить оператор linq to sql InsertOnSubmit?

Я выполняю следующий бит кода:

db.DBUsers.InsertOnSubmit(new DBUser
    {
        Id = id,
        BrandCode3 = brandCode3.ToLower(),
        LoweredUsername = username.ToLower(),
        Username = username,
        CreationDate = date,
        Salt = salt,
        Password = SecurityService.CreateMD5Hash(salt + password),
        PasswordQuestion = passwordQuestion,
        PasswordAnswer = passwordAnswer,
        Comment = comment,
        Email = email,
        IsApproved = isApproved,
        LastPasswordChangedDate = date,
        FailedPasswordAnswerAttemptCount = 0,
        FailedPasswordAnswerAttemptWindowStart = date,
        IsLockedOut = false,
        IsOnLine = false,
        LastActivityDate = date
    }
);
db.SubmitChanges();

UPDATE
Вот атрибуты для первичного ключа:

[Column(Storage="_Id", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
public System.Guid Id

Я заметил, что свойство Auto-sync имеет значение «Never» в окне свойств. Я думаю, это должно быть OnInsert. Собираюсь проверить это.

Прямо перед вызовом submitchanges я проверяю набор изменений, и он не показывает вставок, обновлений или удалений ... Профилировщик SQL показывает, что запросы не отправляются, а прикрепление базы данных db.Log показывает, что никаких действий не выполняется.
Почему ничего не отправлено?

Ответы [ 5 ]

0 голосов
/ 13 ноября 2009

Если ваш столбец Guid Id генерируется базой данных, то это ошибка в Linq To Sql, как описано здесь , поскольку имя вашего свойства отличается от имени вашего столбца.

Из вашего примера похоже, что вы назначаете его в своем приложении, поэтому оно может не применяться.

0 голосов
/ 08 ноября 2009

В коде нет ничего, что указывало бы на проблему. На этом этапе я перетащил новый объект DBUser в ваш файл DBML (переименовал его в DBUser2), выполнил этот код и посмотрел, как он работает. Имея рабочий код, я бы тогда проверил различия между двумя сущностями. Это будет что-то неочевидное. Кроме того, нажмите «Запустить пользовательский инструмент» в файле DBML и просмотрите окно «Ошибки / предупреждения» на наличие предупреждений - SqlMetal может просто сказать вам, что не так в форме предупреждения.

0 голосов
/ 02 ноября 2009

Возможно ли ObjectTracking отключено?

0 голосов
/ 08 ноября 2009

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

[Column(Storage="_Id", AutoSync=AutoSync.OnInsert,
DbType="Int NOT NULL IDENTITY",
IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]

И столбец отметки времени:

[Column(Storage="_Ts", AutoSync=AutoSync.Always, DbType="rowversion NOT NULL",
CanBeNull=false, IsDbGenerated=true, IsVersion=true, 
UpdateCheck=UpdateCheck.Never)]

общедоступная System.Data.Linq.Binary Ts

0 голосов
/ 02 ноября 2009

В модели L2S не определен первичный ключ? Убедитесь, что хотя бы для одного столбца атрибут «первичный ключ» имеет значение true.

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