【问题标题】:LINQ to SQL exception when attempting to insert a new entry in a database table尝试在数据库表中插入新条目时出现 LINQ to SQL 异常
【发布时间】:2011-02-21 22:13:11
【问题描述】:

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

无法将值 NULL 插入 列“用户 ID”,表 'mydatabase.developer.Users';柱子 不允许空值。插入失败。 声明已终止。

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

我几乎复制并粘贴了来自Pro ASP.NET MVC Framework 第 4 章“设置 LINQ to SQL”部分的示例。一切都井井有条...我的数据库有一个带有 UserID (PK) 列和 Name 列(均不可为空)的 Users 表,下面是与数据库表对应的类:

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 服务器不生成主键?有什么方法可以检查插入语句并验证实际发送到服务器的内容?

【问题讨论】:

  • 我在 winforms 上也发生了同样的事情。没有找到解决方案,最终使用了一直有效的 Context.ExecuteCommand(command1) 的 SQL 字符串
  • @Mathieu 我想通了...自动增量必须设置为 true。看起来很明显,但不那么明显的是what auto-increment is called in SQL Server...原来它被称为“身份”,设置身份会导致自动递增,所以它现在就像一个魅力!

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


【解决方案1】:

你的主键是整数吗?您需要设置身份规范:

如果您使用的是唯一标识符之类的东西,则需要在客户端上生成

User user = new User();

user.Id = Guid.NewGuid();

【讨论】:

    【解决方案2】:

    检查表的属性并确保将 UserId allow nulls 设置为 false;确保自动增量设置为是

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多