Переопределение EF CodeFirst сгенерированная база данных

StackOverflow https://stackoverflow.com/questions/4651660

  •  09-10-2019
  •  | 
  •  

Вопрос

У меня есть проект C #, который использует подход CodeFirst EF. Моя проблема заключается в том, насколько EF интерпретирует мои классы и генерирует таблицы базы данных. EF выводит слишком много вещей, и моя приведенная БД не так, как я хотел бы. В частности, он генерирует дополнительные идентификационные столбцы в одном из моих классов сопоставления.

Вот мои классы Poco:

    public partial class Attribute
    {
    public int Id {get;set;}
    public string Name {get;set;}
    public virtual ICollection<EntityAttribute> EntityAttributes {get;set;}
    }

    public partial class Grant
    {
    public int Id {get;set;}
    public string Name {get;set;}
    public virtual ICollection<EntityAttribute> EntityAttributes {get;set;}
    }

    public partial class Donor
    {
    public int Id {get;set;}
    public string Name {get;set;}
    public virtual ICollection<EntityAttribute> EntityAttributes {get;set;}
    }

    public enum EntityTypeEnum
    {
    Grant = 1,
    Donor = 2
    }

    public partial class EntityAttribute
    {
    public int Id {get;set;}
    public int EntityId {get;set;}
    public int AttributeId {get;set;}
    public int EntityTypeId {get;set;}
    public EntityTypeEnum EntityType
    {
       get{return (EntityTypeEnum)this.EntityTypeId;}
       set{this.EntityTypeId = (int)value;}
    }
    public virtual Grant Grant {get;set;}
    public virtual Donor Donor {get;set;}
}

Мой сопоставление классов типичны, но вот класс EntityTtributemap:

public partial class EntityAttributeMap : EntityTypeConfiguration<EntityAttribute>
{
public EntityAttributeMap()
{
this.ToTable("EntityAttribute");
this.HasKey(ea => ea.Id);
this.Property(ea => ea.EntityTypeId).IsRequired();
this.Ignore(ea => ea.EntityType);

this.HasRequired(ea => ea.Grant)
    .WithMany(g => g.EntityAttributes)
    .HasForeignKey(ea => ea.EntityId);

this.HasRequired(ea => ea.Donor)
    .WithMany(d => d.EntityAttributes)
    .HasForeignKey(ea => ea.EntityId);

this.HasRequired(ea => ea.Attribute)
    .WithMany(a => a.EntityAttributes)
    .HasForeignKey(ea => ea.AttributeId)
}
}

Все мои агрегаты выступают, как ожидалось. Тем не менее, таблица Entityattribute оказывается с Donorid и GrantiD Columns. Я не хочу этого, так как у меня на самом деле десятки других «Entitytypes», которые будут использоваться для этого сценария. Вот почему я выбрал класс Entitytypeenum.

Что я делаю не так? Или есть еще один способ, которым я должен отображать их, чтобы EF обрабатывает вещи так, как я хочу. Спасибо.

Это было полезно?

Решение

EF вообще не поддерживает enums, поскольку V4 CTP 5. Они могут быть включены в следующий выпуск.

Сказав это, схема выглядит (для меня; это не ясно из вашего поста, и ваши намерения могут быть разными) слишком близко к Воображение для моего комфорта. Для обычных причин (Google IT) мне не нравится, и не хотелось бы такого рода модели даже с enum Поддержка в EF.

Почему бы не отобрать другой тип сущности вместо enum?

Если вы задаете вопрос в виде «вот мои бизнес-нужды; какая лучшая схема для этого?» Вы можете получить лучший ответ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top