Невозможно сохранить свойство электронной почты в sql из-за ошибки исключения SQL: «Нулевая вставка не разрешена», за исключением того, что свойство не является нулевым ?? (сначала ORM-код) - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу создать электронное письмо, когда сотрудник создается с использованием свойств (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();

        }

Я пытался добавить клиента только для того, чтобы убедиться, что все работает, но столкнулся с той же проблемой! Каждый раз, когда я создавал сотрудника, это не спасало бы от проблем, но с клиентом возвращало ту же нулевую ошибку ссылки

Ответы [ 2 ]

0 голосов
/ 13 ноября 2019

Вы проверили, прежде чем пытаться сохранить, если электронная почта была установлена ​​?, Если она становится нулевой, то набор не работает, я сделаю что-то вроде ниже.

 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";
0 голосов
/ 06 ноября 2019

Может быть, вы можете попытаться установить id в качестве возрастающего значения. Как показано на следующем рисунке.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...