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