2013-02-10 2 views
2

Я хотел бы присвоить имя схемы для моего объекта без указания имени таблицы. Теперь я могу сделать только: modelBuilder.Entity<T>().ToTable("MyEntities", "myschema"); есть ли способ сделать что-то вроде: modelBuilder.Entity<T>().ToTable("myschema")? Пожалуйста, примите во внимание, что я не могу использовать PluralizationService и рассчитать имя_таблицы вручную, так как PluralizationService становятся внутренними ...Entity Framework 6. Название схемы

+0

Может быть, новая функция [мульти-аренды с помощью схемы разбиения] (http://entityframework.codeplex.com/wikipage?title=Multi-tenant% 20Migrations) - это что-то для вас? Метод «ToTable» просто не поддерживает его. –

ответ

1

Как насчет ...

var t = typeof (T); 
var name= t.Name; 
modelBuilder.Entity<T>().ToTable(name, "myschema") 

Если вам нужно множественное имя DbSet из контекста

public DbSet<Single> Plural{ get; set; } 

Затем это небольшое расширение можно переделать, чтобы вернуть требуемое значение. Комбинация обоих без цикла. Но я уверен, вы найдете подходящий вариант ...

public static class BosDalExtensions 
{ 
public static List<string> GetModelNames(this DbContext context) { 
     var model = new List<string>(); 
     var propList = context.GetType().GetProperties(); 
     foreach (var propertyInfo in propList) 
     { 
     if (propertyInfo.PropertyType.GetTypeInfo().Name.StartsWith("DbSet")) 
     { 
      model.Add(propertyInfo.Name); 

     } 
     } 


     return model; 
    } 
public static List<string> GetModelTypes(this DbContext context) 
{ 
    var model = new List<string>(); 
    var propList = context.GetType().GetProperties(); 
    foreach (var propertyInfo in propList) 
    { 
     if (propertyInfo.PropertyType.GetTypeInfo().Name.StartsWith("DbSet" )) 
     { 
      model.Add(propertyInfo.PropertyType.GenericTypeArguments[0].Name); 
     } 
    } 


    return model; 
} 
}