Если у вас есть разумное количество таблиц, я бы добавил их все в модель и создал бы общий интерфейс, который будут реализованы всеми классами, а затем выбрал подходящую модель и использовал Dynamic Linq для запросов.
Я не уверен, что это работает, не проверял и не работал с "EF code-first", но я бы попробовал:
Допустим, у вашей таблицы (таблиц) Foo
есть поля - Bar
, Pub
, X
, и пусть X
будет той, от которой зависит соответствующая таблица?
Тогда я бы определил интерфейс:
interface IFoo
{
int Bar { get; set; }
string Pub { get; set; }
int X { get; set; }
}
Тогда у каждой таблицы будет свой класс в модели:
[Table("Foo1")]
class Foo1 : IFoo
{
public int Bar { get; set; }
public string Pub { get; set; }
public int X { get; set; }
}
[Table("Foo2")]
class Foo2 : IFoo
{
public int Bar { get; set; }
public string Pub { get; set; }
public int X { get; set; }
}
Тогда вы можете отфильтровать их следующим образом:
IQueryable GetAdequateFoo(int X)
{
switch (X) // you could use reflection here to dynamically call the given Set<Foo#>()
{
case 1:
return _context.Set<Foo1>();
case 2:
return _context.Set<Foo2>();
default:
return null;
}
}
IFoo GetFooByBarAndX(int bar, int X)
{
IQueryable context = GetAdequateFoo(X);
return context.Where("it.Bar == @0", bar).Cast<IFoo>();
}
Это просто не проверенное предложение, написанное с головы, пожалуйста, не голосуйте, если я ошибаюсь, и укажите на любые потенциальные проблемы.