Установка таблицы, на которую отображается DbContext - PullRequest
1 голос
/ 29 ноября 2011

В приложении, над которым я работаю, у меня есть, по сути, набор таблиц поиска в базе данных, которые содержат две вещи: ID (int) и Value (строка).

Их всего несколько, но я хочу отобразить их все на один Context, который зависит от имени таблицы. Что-то вроде:

class LookupContext : DbContext
{
    public DbSet<Lookup> Lookups { get; set; }

    public LookupContext(String table)
    {
        // Pseudo code:
        // Bind Lookups based on what table is
        Lookups = MyDatabase.BindTo(table);
    }
}

Так что, если я создаю new LookupContext("foo"), он связывается с таблицей foo. Если я делаю new LookupContext("bar"), он использует таблицу с барами и т. Д.

Есть ли способ сделать это? Или мне нужно создать отдельный контекст + модель для каждой моей таблицы?

Это более или менее мой первый раз, когда я делаю это, поэтому я не совсем уверен, правильно ли я делаю.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Я на самом деле понял, что полностью перебивал все, что не по разуму.Не было никакой причины хранить несколько таблиц с двумя столбцами.

Мне лучше хранить мои данные как:

public class LookupValue
{
    public string LookupValueId { get; set; }
    public string Value { get; set; }
    public string LookupType { get; set; }
}

Где третье поле было просто именем таблицы, которую яРанее он хранился в базе данных.

Меня все еще интересует идея сопоставления одного класса Context с несколькими таблицами, но я считаю, что описанный выше способ является наименее запутанным способом достижения того, что мне нужно..

0 голосов
/ 29 ноября 2011

Ответ, который мы должны дать вам, состоит в том, чтобы использовать перечисления, но пока это еще не доступно - это в следующей версии EF.Подробности см. Здесь: http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx

В более ранних версиях EF вы можете просто создать класс для каждого значения поиска (в качестве примера приведем состояние) и получить код, который будет выглядеть примерно так:1009 *

Это позволит вам использовать один контекст, но все равно будет требовать один класс на таблицу.Вы также можете использовать свободный API, если хотите, чтобы имена таблиц / столбцов отличались от имен классов / свойств соответственно.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...