Используйте [NotMapped] для атрибута, исходящего из родительского класса в платформе сущностей - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть мастер-класс, подобный этому.

    public class MasterTemplate
    {
        [Key]
        public int Id { get; set; }

        [StringLength(50)]
        public string Code { get; set; }

        [Required]
        [StringLength(255)]
        public string Description { get; set; }

        public decimal? SortOrder { get; set; }
    }

У меня есть много классов, которые наследуют вышеуказанный класс.Например, Каста, Национальность, Валюта и т. Д.,

    public class Nationality : MasterTemplate
    {

        // Other memebers of nationality
    }

    public class Caste: MasterTemplate
    {

        // Other memebers of caste
    }

Большинству классов нужны все столбцы, но некоторые из моих классов не нуждаются в «Описание», некоторые из них не нуждаются в «Код ", некоторые другие не нуждаются в" SortOrder ".

    public class Zone: MasterTemplate
    {
        // Logic to mark Description [NotMapped], 
        // so that EF doesn't create a column in database

        // Other memebers of zone
    }

Для члена в том же классе я могу использовать [NotMapped], но как мне сделать это из дочернего класса для атрибута родительского класса.Я знаю, что могу удалить наследование и сделать это, но любопытно узнать, есть ли возможность сделать это из дочернего класса для атрибута родительского класса.

Редактировать:

Как предложено @IvanJazz, изменил код следующим образом.


public class MasterTemplate
{
    [Key]
    public int Id { get; set; }

    [StringLength(50)]
    public virtual string Code { get; set; }

    [Required]
    [StringLength(255)]
    public virtual string Description { get; set; }

    public virtual decimal? SortOrder { get; set; }
}

public class Nationality : MasterTemplate
{
    // Code will not appear in Nationality table
    [NotMapped]
    public override string Code { get; set; }
}

public class Zone : MasterTemplate
{
    // Description will not appear in Zone table
    [NotMapped]
    public override string Description { get; set; }
}

Теперь логически, структура сущностей не должна искать переопределенные и помеченные как атрибуты NotMapped при добавлении записи.При вставке следующего DbValidation возникает ошибка.Не уверен, почему структура сущностей все еще ищет не отображенные атрибуты

enter image description here

enter image description here

1 Ответ

3 голосов
/ 25 апреля 2019

вы можете использовать модификаторы virtual и override для достижения желаемых результатов. Пометьте все необязательные свойства как virtual и override их в производном классе с атрибутом [NotMapped].

public class MasterTemplate
{
    [Key]
    public int Id { get; set; }

    [StringLength(50)]
    public virtual string Code { get; set; }

    [Required]
    [StringLength(255)]
    public virtual string Description { get; set; }

    public virtual decimal? SortOrder { get; set; }
}

public class Nationality : MasterTemplate
{
    // Code will not appear in Nationality table
    [NotMapped]
    public override string Code { get; set; }
}

public class Zone : MasterTemplate
{
    // Description will not appear in Zone table
    [NotMapped]
    public override string Description { get; set; }
}
...