Я хочу создать электронное письмо, когда сотрудник создается с использованием свойств (FirstName и LastName) из базового класса:
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();
}
Показывает Employee в отладчике с созданной электронной почтой
Когда я запускаю код, он создает сотрудника с адресом электронной почты в правильном формате и всем, но когда я пытаюсь сохранить в базе данных, он возвращает ошибку:
SqlException: Cannotвставить значение NULL в столбец «Электронная почта», таблица «GTMSDatabase.dbo.People»;столбец не допускает пустых значений. INSERT не удается.
Я также пытался сохранить письмо как простое {get;set;}, а затем жестко закодировал письмо:
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();
}
Я пытался добавить клиента только для того, чтобы убедиться, что все работает, но столкнулся с той же проблемой! Каждый раз, когда я создавал сотрудника, это не спасало бы от проблем, но с клиентом возвращало ту же нулевую ошибку ссылки