下午好!我有一个教师实体:
public class Teacher
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Login { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Password { get; set; }
public Teacher()
{
}
public Teacher(string name, string login, string password)
{
Name = name;
Login = login;
Password = password;
}
}
我正在尝试添加这样的新条目:
public class JournalContext : DbContext
{
public DbSet<Teacher> Teachers { get; set; }
public JournalContext()
: base("name=JournalContext1")
{
}
public void AddTeacher(string name, string login, string password)
{
Teachers.Add(new Teacher(name, login, password));
SaveChanges();
}
}
但是当我尝试执行该方法时:
using (JournalContext context = new JournalContext())
{
context.AddTeacher("Name", "Login", "Password");
}
抛出异常:
无法将值 NULL 插入“登录”列、表“JournalClass.JournalContext.dbo.Teachers”;列不允许空值。插入失败。该语句已终止。
虽然所有的数据都读取正确。可能是什么问题呢?
这里指定一个字符串类型的字段作为表中的主键,同时要求生成一个数字(自增-Identity)。
你可以通过两种方式做到这一点:
1.去掉autoincrement
Login,设置唯一索引。然后将不使用自动生成:2.主键
Id自增,字段Login唯一:问题显然是DatabaseGenerated(DatabaseGeneratedOption.Identity)
你正试图在那里插入你的价值。那么,Identity字段必须是int类型,而不是string类型。