Использовать общие свойства для всех классов

#c# #entity-framework

#c# #entity-framework

Вопрос:

Я работаю над веб-API с подходом EF Code First. У меня есть несколько общих свойств, которые я подумал о том, чтобы сделать его общим классом и использовать его во всех моделях.

Теперь, когда я попытался обновить базу данных с помощью PMC, я получаю приведенную ниже ошибку,

Значение не может быть нулевым.

Имя параметра: EntitySet

Но если я удалю общее свойство класса в модели и внесу обновление, оно будет работать нормально.

Модель:

  public class Employee
    {
        [Key]
        public int EmployeeId { get; set; }
        [Required, MaxLength(50)]
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime DOB { get; set; }
        public int City { get; set; }
        public int State { get; set; }
        public int Country { get; set; }
        public ComFields DateTimeDetails { get; set; } //This is the line
        [NotMapped]
        public List<Employee> Employees { get; set; }

    }
  

Общий класс:

  public class ComFields
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public DateTime CreatedDate { get; set; }
        public int? CreatedBy { get; set; }
        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
        public DateTime ModifiedDate { get; set; }
        public int? ModifiedBy { get; set; }
        public bool Active { get; set; } = true;

    }
  

Где я не прав? Дайте мне знать, если есть какой-либо другой лучший способ обработки таких сценариев.

Обновить:

Пытался переопределить начальный метод для добавления значений,

 protected override void Seed(ExerciseWebAPI.Context.DatabaseContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data.

            context.Users.AddOrUpdate(x => x.UserId,
                new Users { Name = "aaa", Password = "CA", Email = "c@c.com", MobileNumber = "1234567", Age = 31, CountryId = 1, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now, CreatedBy = 0, ModifiedBy = 0, Active = true },
                new Users { Name = "bbb", Password = "DA", Email = "a@a.com", MobileNumber = "1234987", Age = 31, CountryId = 2, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now, CreatedBy = 0, ModifiedBy = 0, Active = true },
                new Users { Name = "ccc", Password = "BA", Email = "e@e.com", MobileNumber = "9876543", Age = 31, CountryId = 5, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now, CreatedBy = 0, ModifiedBy = 0, Active = true }

                );
        }
  

Комментарии:

1. Более чем вероятно, DateTimeDetails это null когда вы пытаетесь сохранить. Обязательно инициализируйте его. Также вы должны показать нам этот код

2. Может быть, наследование от этого базового класса было бы лучше, чем использование свойства?

3. @MickyD обновил код

4. @madoxdev не будет ли это избыточностью кода? Создаст ли EF столбцы, если я просто создам наследование?

5. Да, так и будет. Не похоже, что это должно быть свойство. Это также может быть OwnedType, но это используется в других сценариях