Come posso cambiare la convenzione di denominazione della tabella molti-a-molti generata automaticamente?Come modificare la convenzione di denominazione delle relazioni tabella Many-to-Many?
Si supponga che ho due classi:
public class User
{
public int UserId { get; set; }
public virtual List<Role> Roles { get; set; }
}
public class Role
{
public int RoleId { get; set; }
public virtual List<User> Users { get; set; }
}
Per impostazione predefinita, questo creerà una tabella chiamata UserRoles.
posso cambiare il nome della tabella uno a UsersInRoles, ad esempio, utilizzando il seguente nella esclusione OnModelCreating della mia DbContext:
modelBuilder.Entity<User>()
.HasMany(p => p.Roles)
.WithMany(p => p.Users)
.Map(mc =>
{
mc.MapLeftKey("UserId");
mc.MapRightKey("RoleId");
mc.ToTable("UsersInRoles");
});
Tuttavia, ciò che voglio veramente fare è modificare la convenzione di denominazione in modo tale che, per impostazione predefinita, tutte le tabelle molti-a-molti generate automaticamente utilizzino questa nuova convenzione. Non riesco a capire come farlo, o se è anche possibile. Non mi piace dover specificare 9 righe di codice extra ogni volta che si specifica una di queste relazioni.
Attualmente sto usando la versione EF 6.0.0-rc1.
Per curiosità, perché vuoi davvero farlo? La codifica per convenzione perde tutto il suo fascino quando continui ad averne di differenti. –
Si potrebbe dare un'occhiata a [Convenzioni personalizzate] (http://msdn.microsoft.com/en-us/data/jj819164.aspx). –
@TonyHopkinson, Nel mio scenario reale, sto scrivendo un framework che cambia tutti i nomi delle tabelle con un prefisso basato sulla loro posizione "componente" (come Core, Risorse umane, Finanza, ecc.). Mentre ero in grado di scrivere un catch-all per la rinomina standard delle tabelle, non funzionava con queste tabelle many-to-many, e non riesco a capire come. Per quanto riguarda il mio esempio, ho usato questa convenzione per molto tempo e mi piacerebbe seguirlo. –