尝试在数据库表中插入新条目时出现LINQ to SQL异常

时间:2011-02-21 22:13:12

标签: c# sql asp.net-mvc database linq-to-sql

我正在尝试通过LINK to SQL在我的数据库中插入用户,但我得到了一个例外:

  

无法将值NULL插入   列'UserID',表   'mydatabase.developer.Users';柱   不允许空值。 INSERT失败。   声明已经终止。

我已将UserID标记为Users表中的主键,我希望当我尝试在表中插入新用户时,SQL Server会自动生成PK。

我几乎复制并粘贴了Pro ASP.NET MVC Framework第4章“设置LINQ to 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服务器不生成主键?有什么方法可以检查insert语句并验证实际发送到服务器的内容吗?

2 个答案:

答案 0 :(得分:11)

您的主键是整数吗?您需要设置标识规范: enter image description here

如果您使用的是uniqueidentifier,则需要在客户端上使用

生成
User user = new User();

user.Id = Guid.NewGuid();

答案 1 :(得分:3)

检查表的属性并确保UserId允许空值设置为false;确保自动增量设置为是