Исключение LINQ to SQL при попытке вставить новую запись в таблицу базы данных - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь вставить пользователя в свою базу данных через LINK to SQL, и получаю исключение:

Невозможно вставить значение NULL в столбец 'UserID', таблица 'mydatabase.developer.Users'; колонка не допускает нулевые значения. Вставить не удается. Заявление было прекращено.

Я отметил UserID как первичный ключ в моей таблице Users, и я ожидал, что SQL Server автоматически сгенерирует PK, когда я попытаюсь вставить нового пользователя в таблицу.

Я в значительной степени скопировал и вставил пример из Pro ASP.NET MVC Framework Глава 4 Раздел «Настройка LINQ для SQL». Все в порядке ... в моей базе данных есть таблица Users со столбцом UserID (PK) и столбцом Name (оба необнуляемые), ниже приведен класс, соответствующий таблице базы данных:

public class User
{
    [DisplayName("User ID")]
    [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
    internal int UserID { get; set; }

    [DisplayName("Name")]
    [Column]
    public string Name{ get; set; }
}

У меня также есть класс репозитория, который позволяет мне изменять базу данных:

public class UsersRepository : IUsersRepository
{
    private DataContext database;
    private Table<User> usersTable;

    public UsersRepository(string connectionString)
    {
        database = new DataContext(connectionString);
        usersTable = database.GetTable<User>();
    }

    public void AddUser(User user)
    {
        usersTable.InsertOnSubmit(user);
        try
        {
            database.SubmitChanges();
        }
        catch (Exception e)
        {
            var msg = e.Message;
        }
    }
    //...
}

IUsersRepository ur = new UsersRepository(connectionString);
ur.AddUser(new User{Name = "Joe"});

Я также пытался установить для UserID -1, 0 и 1, но я получаю то же исключение!

ur.AddUser(new User{UserID = -1, Name = "Joe"});
ur.AddUser(new User{UserID = 0, Name = "Joe"});
ur.AddUser(new User{UserID = 1, Name = "Joe"});

Кто-нибудь знает, что здесь может происходить? Я действительно сбит с толку этим: что может заставить SQL-сервер не генерировать первичный ключ? Можно ли как-то проверить оператор вставки и проверить, что на самом деле отправляется на сервер?

Ответы [ 2 ]

11 голосов
/ 22 февраля 2011

Ваш первичный ключ является целым числом? Вам необходимо установить спецификацию личности: enter image description here

Если вы используете что-то вроде уникального идентификатора, вам нужно сгенерировать на клиенте команду

User user = new User();

user.Id = Guid.NewGuid();
3 голосов
/ 22 февраля 2011

Проверьте свойства таблицы и убедитесь, что UserId allow null имеет значение false;убедитесь, что автоинкремент установлен на да

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