При использовании явной реализации интерфейса в классах сущностей EF Core не создает столбец в таблице. - PullRequest
0 голосов
/ 25 апреля 2020
public interface IRecordInformation
    {
         DateTime CreatedOn { get; set; }
         DateTime ModifiedOn { get; set; }

    }
public class CareerApplication : IRecordInformation
    {
        public int CareerApplicationId { get; set; }
        public string Name { get; set; }
        public string FileName { get; set; }
        public string Email { get; set; }
        public DateTime IRecordInformation.CreatedOn { get; set; }
        public  DateTime IRecordInformation.ModifiedOn { get; set; }
    }

Почему я это делаю? Потому что, если я изменяю интерфейс и удаляю свойство, то должна быть ошибка времени компиляции, что в интерфейсе не объявлено свойство, для которого существует реализация в классе. Таким образом, я могу удалить реализацию из класса. Но если я не использую явную реализацию, используя имя интерфейса в классе, то, если я удаляю свойство из интерфейса, то это соответствующее свойство будет обрабатываться как свойство самого класса.

Я пытался сделать как

public DateTime CreatedOn { get => ((IRecordInformation)this).CreatedOn; set => ((IRecordInformation)this).CreatedOn = value; }

Но есть исключение переполнения стека, для которого я прикрепляю образ

Ошибка, с которой я сталкиваюсь

1 Ответ

0 голосов
/ 01 мая 2020

Это работает, как предложено @Gert Arnold

public DateTime CreatedOn { get => ((IRecordInformation)this).CreatedOn; set => ((IRecordInformation)this).CreatedOn = value; }
        public DateTime ModifiedOn
        {
            get
            {
                return ((IRecordInformation)this).ModifiedOn;
            }
            set
            {
                ((IRecordInformation)this).ModifiedOn = value;
            }

        }
        DateTime IRecordInformation.CreatedOn { get; set; }
        DateTime IRecordInformation.ModifiedOn { get; set; }

        public bool IsPublished
        {
            get
            {
                return ((IPublishInformation)this).IsPublished;
            }
            set
            {
                ((IPublishInformation)this).IsPublished = value;
            }

        }
        bool IPublishInformation.IsPublished { get; set; }

В моем блоге вы можете найти полную проблему, с которой я столкнулся в моем проекте http://blogs.anujchauhan.com/post/2020/05/01/Implicit-to-Explicit-implementations-of-interface-in-class-for-Entity-Framework-Core-Common-Columns-in-table-like-CreatedOn-UpdatedOn-DeletedOn-IsPublished

...