Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试在数据库表中插入新项时出现LINQ to SQL异常_C#_Sql_Asp.net Mvc_Database_Linq To Sql - Fatal编程技术网

C# 尝试在数据库表中插入新项时出现LINQ to SQL异常

C# 尝试在数据库表中插入新项时出现LINQ to SQL异常,c#,sql,asp.net-mvc,database,linq-to-sql,C#,Sql,Asp.net Mvc,Database,Linq To Sql,我试图通过SQL链接在我的数据库中插入一个用户,但遇到了一个异常: 无法将值NULL插入到 列“UserID”,表 'mydatabase.developer.Users';柱 不允许空值。插入失败。 声明已终止 我已经将UserID标记为Users表中的主键,我希望当我尝试在表中插入新用户时,SQL Server会自动生成PK 我几乎复制并粘贴了第4章“将LINQ设置为SQL”一节中的示例。。。我的数据库有一个Users表,其中有一个UserID(PK)列和一个Name列(都不可为null),

我试图通过SQL链接在我的数据库中插入一个用户,但遇到了一个异常:

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

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

我几乎复制并粘贴了第4章“将LINQ设置为SQL”一节中的示例。。。我的数据库有一个Users表,其中有一个UserID(PK)列和一个Name列(都不可为null),下面是与数据库表对应的类:

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; }
}
我还有一个repository类,它允许我修改数据库:

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"});

有人知道这里会发生什么吗?我真的很困惑:什么会导致SQL server不生成主键?是否有任何方法可以检查insert语句并验证实际发送到服务器的内容?

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

主键是否为整数?您需要设置标识规范:

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

User user = new User();

user.Id = Guid.NewGuid();

我在winforms上也遇到过同样的情况。未找到解决方案,最终使用了具有Context.ExecuteCommand(command1)的SQL字符串,该命令在所有情况下都有效time@Mathieu我想出来了。。。“自动增量”必须设置为true。这似乎很明显,但不那么明显的是。。。事实证明,它被称为“身份”,设置身份会导致自动递增,所以它现在就像一个符咒!我也是这么想的,但我在寻找自动增量,却找不到。
User user = new User();

user.Id = Guid.NewGuid();