Я пытаюсь вставить пользователя в свою базу данных через 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-сервер не генерировать первичный ключ? Можно ли как-то проверить оператор вставки и проверить, что на самом деле отправляется на сервер?