Here is my model
I need to map this model to Entity Framework, but my results are building only one table named Fluxo, and there are lots of ugly FKs.
Besides, I don't know how can I map my PK, defined at Fluxo class
Here is my mappings
public class FluxoPrincipalMap : EntityTypeConfiguration<FluxoPrincipal>
{
public FluxoPrincipalMap()
{
HasRequired(f => f.CasoDeUso).WithOptional(c => c.FluxoPrincipal);
}
}
public class FluxoAlternativoMap : EntityTypeConfiguration<FluxoAlternativo>
{
public FluxoAlternativoMap()
{
}
}
class FluxoDeExcecaoMap : EntityTypeConfiguration<FluxoDeExcecao>
{
public FluxoDeExcecaoMap()
{
}
}
UPDATE 1 - After Some Mapping Improvement
Ok, here is my new mappings
public class FluxoPrincipalMap : EntityTypeConfiguration<FluxoPrincipal>
{
public FluxoPrincipalMap()
{
ToTable(nameof(FluxoPrincipal));
HasKey(x => x.FluxoId);
Property(x => x.FluxoId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasRequired(f => f.CasoDeUso).WithOptional(c => c.FluxoPrincipal);
Ignore(f => f.ValidationResult);
Ignore(f => f.IsValid);
}
}
public class FluxoAlternativoMap : EntityTypeConfiguration<FluxoAlternativo>
{
public FluxoAlternativoMap()
{
ToTable(nameof(FluxoAlternativo));
HasKey(x => x.FluxoId);
Property(x => x.FluxoId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasRequired(x => x.FluxoPrincipal)
.WithMany(x => x.FluxosAlternativos)
.HasForeignKey(x => x.FluxoPrincipalId);
Ignore(x => x.ValidationResult);
Ignore(x => x.IsValid);
}
}
class FluxoDeExcecaoMap : EntityTypeConfiguration<FluxoDeExcecao>
{
public FluxoDeExcecaoMap()
{
ToTable(nameof(FluxoDeExcecao));
HasKey(x => x.FluxoId);
Property(x => x.FluxoId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasRequired(x => x.FluxoPrincipal)
.WithMany(x => x.FluxosDeExcecao)
.HasForeignKey(x => x.FluxoPrincipalId);
Ignore(x => x.ValidationResult);
Ignore(x => x.IsValid);
}
}
And here is my context config
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
modelBuilder.Properties()
// ReSharper disable once PossibleNullReferenceException
.Where(p => p.Name == p.ReflectedType.Name + "Id")
.Configure(p => p.IsKey());
modelBuilder.Properties<string>()
.Configure(p => p.HasColumnType("varchar"));
modelBuilder.Properties<string>()
.Configure(p => p.HasMaxLength(100));
modelBuilder.Configurations.Add(new ProjetoMap());
modelBuilder.Configurations.Add(new RequisitoMap());
modelBuilder.Configurations.Add(new CasoDeUsoMap());
modelBuilder.Configurations.Add(new FluxoPrincipalMap());
modelBuilder.Configurations.Add(new FluxoAlternativoMap());
modelBuilder.Configurations.Add(new FluxoDeExcecaoMap());
base.OnModelCreating(modelBuilder);
}