Как я могу изменить правило именования автоматически созданной таблицы «многие-ко-многим»?Как изменить соглашение об именах отношений «Многие-ко-многим»?
Предположим, у меня есть два класса:
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; }
}
По умолчанию, это создаст таблицу с именем UserRoles.
я могу изменить имя этой таблицы один к UsersInRoles, например, с помощью следующих в OnModelCreating переопределение моего DbContext:
modelBuilder.Entity<User>()
.HasMany(p => p.Roles)
.WithMany(p => p.Users)
.Map(mc =>
{
mc.MapLeftKey("UserId");
mc.MapRightKey("RoleId");
mc.ToTable("UsersInRoles");
});
Однако то, что я действительно хочу сделать это изменение соглашения об именах, так что по умолчанию все автоматически генерируемые таблицы «многие ко многим» используют это новое соглашение. Я не могу понять, как это сделать, или если это возможно. Мне не нравится указывать 9 строк дополнительного кода каждый раз, когда я укажу одно из этих отношений.
В настоящее время я использую EF версию 6.0.0-rc1.
Из любопытства, почему вы действительно хотите это сделать? Кодирование по соглашению теряет все свое очарование, когда вы продолжаете иметь разные. –
Вы можете взглянуть на [Пользовательские соглашения] (http://msdn.microsoft.com/en-us/data/jj819164.aspx). –
@TonyHopkinson. В моем реальном сценарии я пишу фреймворк, который изменяет все имена таблиц с префиксом на основе их «компонентного» местоположения (например, Core, HR, Finance и т. Д.). В то время как я смог написать catch-all для стандартного переименования таблицы, он не работал с этими таблицами «многие-ко-многим», и я не могу понять, как это сделать. Что касается моего примера, я давно использовал это соглашение и хотел бы придерживаться его. –