Несколько классов класс DataContext всегда уместно?

Для того, чтобы полностью использовать LinqToSql в ASP.net 3.5 приложений, надо создать классы класс DataContext (что обычно делается с помощью конструктора в VS 2008). С точки зрения пользовательского интерфейса, что DataContext конструкции из разделов базы данных, которые вы хотели бы выставить на через LinqToSql и является неотъемлемой частью в настройке функций ОРМ на LinqToSql. Мой вопрос: я создаю проект, который использует большую базу данных, где все таблицы связаны каким-то образом через внешние ключи. Мой первый склонялся к тому, чтобы сделать один огромный класс DataContext, который моделирует всю базу данных. Таким образом, я мог бы в теории (хотя я не знаю, если это потребуется на практике) использовать внешний ключ связи, которые создаются с помощью LinqToSql, чтобы легко перейти между связанными объектами в мой код, вставьте связанных объектов и т. д. Однако, после некоторых раздумий, я сейчас подумала, что это может сделать больше смысла, чтобы создать несколько классов класс DataContext, каждая из которых связана с определенным пространством имен или логически взаимосвязанных раздела, В моей базе данных. Моя главная забота заключается в том, что инстанцирование и утилизации один огромный класс DataContext класса все время на отдельные операции, которые относятся к определенным областям базе будет навязывать ненужное наложение на ресурсы приложения. Кроме того, его проще создать и управлять DataContext в файлы меньшего размера, чем одну большую. Дело в том, что я потеряю, что будет какая-то дальние разделы базы данных, что бы не быть управляемым через LinqToSql (хотя цепочка связей соединяет их в реальной базе данных). Кроме того, там будут некоторые классы таблицы, которая будет существовать в более чем одном DataContext. Какие мысли или опыт на Ли несколько DataContexts (соответствующие пространства имен ДБ) целесообразно вместо (или в дополнение к) один очень большой класс DataContext (соответствует весь ДБ)?

Для того, чтобы полностью использовать LinqToSql в ASP.net 3.5 приложений, надо создать классы класс DataContext (что обычно делается с помощью конструктора в VS 2008). С точки зрения пользовательского интерфейса, что DataContext конструкции из разделов базы данных, которые вы хотели бы выставить на через LinqToSql и является неотъемлемой частью в настройке функций ОРМ на LinqToSql. Мой вопрос: я создаю проект, который использует большую базу данных, где все таблицы связаны каким-то образом через внешние ключи. Мой первый склонялся к тому, чтобы сделать один огромный класс DataContext, который моделирует всю базу данных. Таким образом, я мог бы в теории (хотя я не знаю, если это потребуется на практике) использовать внешний ключ связи, которые создаются с помощью LinqToSql, чтобы легко перейти между связанными объектами в мой код, вставьте связанных объектов и т. д. Однако, после некоторых раздумий, я сейчас подумала, что это может сделать больше смысла, чтобы создать несколько классов класс DataContext, каждая из которых связана с определенным пространством имен или логически взаимосвязанных раздела, В моей базе данных. Моя главная забота заключается в том, что инстанцирование и утилизации один огромный класс DataContext класса все время на отдельные операции, которые относятся к определенным областям базе будет навязывать ненужное наложение на ресурсы приложения. Кроме того, его проще создать и управлять DataContext в файлы меньшего размера, чем одну большую. Дело в том, что я потеряю, что будет какая-то дальние разделы базы данных, что бы не быть управляемым через LinqToSql (хотя цепочка связей соединяет их в реальной базе данных). Кроме того, там будут некоторые классы таблицы, которая будет существовать в более чем одном DataContext. Какие мысли или опыт на Ли несколько DataContexts (соответствующие пространства имен ДБ) целесообразно вместо (или в дополнение к) один очень большой класс DataContext (соответствует весь ДБ)?

Я не согласен с ответом Джон. Класс DataContext (или LINQ к объектам objectcontext в) больше "единицы работы", чем соединение. Он управляет отслеживание изменений и т. д. Смотрите в блоге на описание:
Жизни LINQ к SQL DataContext в
Четыре главных пунктов в этом блоге, что значение DataContext:
Идеально подходит
на "единицу работы" подход
Также предназначен для
"операция" сервер без гражданства
Не предназначен для
Долгоживущие использования

```
Should be used very carefully after
any SumbitChanges() operation.

```

Учитывая, что, я не думаю, что через более чем одном DataContext будет делать никакого вреда - на самом деле, создание различных DataContexts для различных видов работ поможет сделать ваш LinqToSql impelmentation более практичного и организованного. Единственный недостаток-вы не сможете использовать sqlmetal для авто-создать свой dmbl.

Я бы бороться за один и тот же вопрос в то время как ретро сторона LINQ к SQL через наследие ДБ. В нашей базе есть немного воппер (150 таблиц) и после некоторых размышлений и экспериментов, я решил использовать несколько DataContexts. Ли это считается анти-паттерн еще предстоит выяснить, но сейчас это делает жизнь управляемой.

Я думаю, что Джон является правильным. "Моя главная забота заключается в том, что инстанцирование и утилизации одного огромного класса DataContext все время для отдельных операций, которые относятся к определенным областям базе будет навязывать ненужное наложение на ресурсы приложения" Как вы поддерживаете это заявление? Каков ваш эксперимент, который показывает, что большое значение DataContext является узким местом для производительности? Наличие нескольких datacontexts много как с несколькими базами данных и имеет смысл в подобных ситуациях, то есть практически никогда. Если вы работаете с несколькими datacontexts нужно отслеживать, какие объекты относятся к DataContext и вы не можете касаться объектов, которые не находятся в том же контексте данных. Это очень дорогое запахом дизайн для реальной пользы. @Эван "класс DataContext (или LINQ к объектам objectcontext в) больше "единицы работы", чем связь" Именно поэтому вы не должны иметь более одного класса DataContext. Почему вы хотите больше, что одна "единица работы" в то время?

Я вынужден не согласиться с принятыми ответа. На поставленный вопрос, система имеет один большой базе С сильный внешний ключ отношения между почти каждой таблицы (также случай, когда я работаю). В этом случае, разбив его на более мелкие DataContexts (ДК) имеет две непосредственные и существенные недостатки (как упомянуто в вопрос): Вы теряете отношения между некоторыми таблицами. Вы можете попробовать, чтобы выбрать мудро границы DC, но вы в конечном итоге столкнетесь с ситуацией, когда было бы очень удобно, чтобы использовать отношения с столик в одном ДЦ на таблицу в другой, и вы не сможете. Некоторые таблицы могут отображаться в нескольких ДК. Это означает, что если вы хотите добавить таблицу-специфические хелперы, бизнес-логику, или другой код в разделяемые классы, типы не совместимы на ДК. Вы можете обойти это путем наследования каждый класс сущностей из собственного конкретного базового класса, который становится грязным. Кроме того, изменения схемы должны быть продублированы на нескольких ДЦ. Теперь эти существенные недостатки. Есть ли преимущества достаточно велики, чтобы их преодолеть? Вопрос упоминает о производительности: Моя главная забота заключается в том, что инстанцирование и утилизации один огромный Класс DataContext все время для отдельных операций, которые связаны к конкретным областям базы данных будет навязывать ненужное введение в ресурсы приложения. На самом деле, это не правда, что большие постоянного тока занимает значительно больше времени, чтобы создать или использовать в типичном единицу работы. На самом деле, после создания первого экземпляра в рабочем процессе, последующие экземпляры одного ДЦ могут быть созданы практически мгновенно. Единственное реальное преимущество от разных ДЦ на один большой базе с тщательным внешним ключом отношения является то, что вы можете разбить ваш код немного лучше. Но вы уже можете сделать это с помощью частичных классов. Кроме того, устройство работает на самом деле не относящихся к исходному вопросу. Единица работы обычно относится к сколько работ один экземпляр постоянного тока делает, а не сколько работа класс тока на это способна.

В мой опыт работы с LINQ к SQL и LINQ для сущностей с DataContext является синонимом подключение к базе данных. Поэтому, если вы собираетесь использовать несколько хранилищ данных, вы должны использовать несколько DataContexts. Моя реакция кишки, вы не замечали, чтобы сильно замедлить с DataContext, который включает в себя большое количество таблиц. Однако, если вы сделали, вы всегда могли бы разделить логически на базе в точках, где вы можете изолировать таблицы, которые не имеют ни какого отношения к другим наборам таблиц и создать несколько контекстов.