Jak mogę zmienić konwencję nazewnictwa automatycznie generowanego tabeli wielu do wielu?Jak zmienić konwencję nazewnictwa relacji między wieloma a wieloma tabelami?
Przyjmijmy, mam dwie klasy:
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; }
}
domyślnie będzie to utworzyć tabelę o nazwie UserRoles.
mogę zmienić nazwę tego jeden tabeli UsersInRoles, na przykład, za pomocą następujących czynności w ręcznym OnModelCreating mojego DbContext:
modelBuilder.Entity<User>()
.HasMany(p => p.Roles)
.WithMany(p => p.Users)
.Map(mc =>
{
mc.MapLeftKey("UserId");
mc.MapRightKey("RoleId");
mc.ToTable("UsersInRoles");
});
Jednak to, co naprawdę chcesz robić zmienia konwencję nazewnictwa, tak aby domyślnie wszystkie automatycznie generowane tabele wielu do wielu używały tej nowej konwencji. Nie mogę wymyślić, jak to zrobić, lub jeśli to możliwe. Nie lubię określać 9 linii dodatkowego kodu za każdym razem, gdy określę jedną z tych relacji.
Obecnie używam wersji EF 6.0.0-rc1.
Z ciekawości, dlaczego tak naprawdę chcesz to zrobić? Kodowanie według konwencji traci cały swój urok, gdy masz inne. –
Możesz rzucić okiem na [Konwencje niestandardowe] (http://msdn.microsoft.com/en-us/data/jj819164.aspx). –
@ TonyHopkinson, W moim prawdziwym scenariuszu piszę framework, który zmienia wszystkie nazwy tabel z prefiksem na podstawie ich "komponentowej" lokalizacji (takich jak Core, HR, Finanse, itp.). Chociaż udało mi się napisać catch-all dla standardowej zmiany nazwy tabeli, to nie działało z tymi tabelami "wiele do wielu", i nie potrafię zrozumieć, w jaki sposób. Jeśli chodzi o mój przykład, używam tej konwencji przez długi czas i chciałbym się z nią uporać. –