У меня есть проект C #, который использует подход EF CodeFirst.Моя проблема в том, как 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;}
}
Мои классы отображения являются типичными, но вот класс EntityAttributeMap:
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.Я не хочу этого, так как на самом деле у меня есть десятки других «EntityTypes», которые будут использоваться для этого сценария.Вот почему я выбрал класс EntityTypeEnum.
Что я делаю не так?Или есть другой способ, которым я должен составить карту, чтобы EF обрабатывал вещи так, как я хочу.Спасибо.