由于SQL异常错误,无法将Email属性保存到sql中:除了属性不为null之外,“不允许插入null”?(首先是ORM代码)

时间:2019-11-06 01:51:12

标签: ef-code-first visual-studio-2019 asp.net-core-3.0 ssms-2018

当我使用基类的属性(名字和姓氏)创建雇员时,我想生成电子邮件:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DOB { get; set; }
    public string Phone { get; set; }

}

 public class Employee : Person
{
    public Employee()
    {
        Packages = new List<Package>();

    }
    public string Email { get =>$"{FirstName[0]}.{LastName}@GTravel.com.au"; }

    public IEnumerable<Package> Packages { get; set; }
}

所以输出应该类似于:J.Smith@GTravel.com.au 然后,我希望能够将此员工保存到sql数据库中,并以Person作为实体/表,而将Employee作为区分符。

using (var gtmsdb = new GTMSDbContext())
        {

            var newEmployee = new Employee
            {
                FirstName = "John",
                LastName = "Smith",
                DOB = new DateTime(1992, 09, 16),
                Phone = "03-1234-567"

            };
            gtmsdb.People.Add(newEmployee);
            gtmsdb.SaveChanges();

        }

Shows Employee in debugger with email created

运行代码时,它将使用正确格式的电子邮件以及所有内容创建员工,但是当我尝试将其保存到数据库时,它将返回错误:

  

SqlException:无法将值NULL插入表的'Email'列中   'GTMSDatabase.dbo.People';列不允许为空。 INSERT失败。

我还尝试将电子邮件保存为简单的{get;设置;},然后对电子邮件进行硬编码:

 public string Email { get; set; }


 var newEmployee = new Employee
            {
                FirstName = "John",
                LastName = "Smith",
                DOB = new DateTime(1992, 09, 16),
                Phone = "032166702",
                Email ="j.smith@gtravel"

            };
            gtmsdb.People.Add(newEmployee);
            gtmsdb.SaveChanges();

但是仍然返回相同的错误消息。  我还测试了其他(新)属性,这些属性运行良好,可以删除并重试迁移,并在数据库中检查是否有错误,但现在不确定下一步是否可以执行。在我的上下文中没有对电子邮件的引用,因此我需要在其中进行初始化吗?

编辑:我创建了另一个较小规模的项目,在其中运行完全相同的代码,并且电子邮件没有任何问题地保存:

using (var db = new ETDbContext())
        {
            var newEmployee = new Employee
            {
                FirstName = "John",
                LastName = "Smith",
                DOB = new DateTime(1992, 09, 16),
                Phone = "032166702"

            };
            db.People.Add(newEmployee);
            var nc = new Customer
            {
                FirstName = "Jane",
                LastName = "Doe",
                DOB = new DateTime(1992, 09, 16),
                Phone = "032166702",
                Email = "customerEmail"
            };
            db.People.Add(nc);
            db.SaveChanges();

        }

我试图添加一个Customer只是为了确保一切正常,但是遇到了同样的问题!每当我创建一个员工时,它都不会保存任何问题,但是与客户一起,它会返回相同的空引用错误

2 个答案:

答案 0 :(得分:0)

也许您可以尝试将id设置为递增值。就像下面的图片一样。

enter image description here

答案 1 :(得分:0)

您是否在尝试保存是否设置了电子邮件之前检查过?,如果它为空则表明该设置不起作用,我将执行以下操作。

 var newEmployee = new Employee
        {
            FirstName = "John",
            LastName = "Smith",
            DOB = new DateTime(1992, 09, 16),
            Phone = "03-1234-567",
            Email = '';
        };
 newEmployee.Email = newEmployee.FirstName.Substring(0,1).ToLower() + 
 newEmployee.LastName.ToLower() +"@gtravel";