当我使用基类的属性(名字和姓氏)创建雇员时,我想生成电子邮件:
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只是为了确保一切正常,但是遇到了同样的问题!每当我创建一个员工时,它都不会保存任何问题,但是与客户一起,它会返回相同的空引用错误
答案 0 :(得分:0)
答案 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";