Kir*_*ril 2 c# sql database asp.net-mvc linq-to-sql
我试图通过LINK to SQL在我的数据库中插入一个用户,我得到一个例外:
无法将值NULL插入列'UserID',表'mydatabase.developer.Users'; 列不允许空值.INSERT失败.该语句已终止.
我已将UserID标记为Users表中的主键,并且当我尝试在表中插入新用户时,我预计SQL Server将自动生成PK.
我几乎复制并粘贴了Pro ASP.NET MVC框架第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; }
}
Run Code Online (Sandbox Code Playgroud)
我还有一个存储库类,允许我修改数据库:
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"});
Run Code Online (Sandbox Code Playgroud)
我也尝试将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"});
Run Code Online (Sandbox Code Playgroud)
有谁知道这里可能会发生什么?我真的很困惑:什么可能导致SQL服务器不生成主键?有什么方法可以检查插入语句并验证实际发送到服务器的是什么?
mfa*_*nto 11
你的主键是整数吗?您需要设置标识规范:

如果您使用的是uniqueidentifier之类的东西,则需要在客户端上生成
User user = new User();
user.Id = Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2828 次 |
| 最近记录: |