C #, Winforms & LINQ to SQL .. Жизненный цикл Datacontext? - PullRequest
5 голосов
/ 19 января 2009

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

В рамках этой структуры мы предоставляем LINQ to SQL ORM для использования при необходимости. Все это основано на платформе Microsoft MVC. Со стороны MVC мы добавили новый текстовый текст в наш базовый контроллер. Это позволяет нам полный жизненный цикл datacontext, который чрезвычайно полезен для транзакций.

Одна из задач, которую мы стремимся выполнить, - обеспечить поддержку Winforms.

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

Учитывая, что подход MVC довольно прост, поскольку загрузка одной страницы представляет собой логическую транзакцию, трудно найти решение на стороне Winforms.

Кто-нибудь делал что-нибудь подобное или есть какие-либо рекомендации?

Ответы [ 4 ]

3 голосов
/ 21 января 2009

Если вы собираетесь выбирать между наличием долгоживущего DataContext (например, как Singleton в вашем приложении) или недолговечным DataContexts, я бы выбрал второй. Я бы создал () DataContext для каждой «единицы работы» и следил за тем, чтобы он работал как можно быстрее. Создание нового DataContext не является большой проблемой, так как они все равно кэшируют метаданные. Долгоживущий DataContext дает вам немного кошмара, когда он начинает отслеживать многие объекты.

2 голосов
/ 20 января 2009

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

Мы создали оболочку приложения, которая загружает формы аналогично модели запроса / ответа.

Я создал интерфейс IRenderer с методом RenderView(), который я реализовал для веб-страниц и форм Windows. Это позволяет мне использовать один и тот же контроллер и модель для обоих. Ищите Model-View-ViewModel (MVVM) на goodle, и вы можете найти что-то об этом подходе.

Я думаю, эта статья может помочь вам понять, о чем я говорю.

0 голосов
/ 17 декабря 2009

Я знаю, что этот поток немного староват, но в unhaddins есть реализация Conversation-per-BusinessTransaction. В настоящее время у нас есть только реализация для nhibernate, но реализовать ее для Linq to sql или структуры сущностей должно быть просто. Проверьте мой ответ в этом списке .

0 голосов
/ 21 января 2009

Проблема, связанная с наличием только одного datacontext для всего, заключается в том, что у вас не может быть нескольких открытых правок и только одно. Для многих моделей приложений это не стартер. Поэтому у меня есть один одноэлементный текст данных для чтения и я создаю его для каждого действия коммита. Функция обновления отсоединяет объекты, которые должны быть сохранены, от прочитанного текста данных и присоединяет их к новому тексту данных фиксации, затем запускает изменения DC.Submit.

Единственная хитрость заключается в том, чтобы иметь возможность отслеживать, должен ли объект обновляться при отправке или вставляться при отправке, и если у вас есть стандартный первичный ключ auto num или вы управляете в коллекции где-то, какой столбец должен служить проверьте, какой класс для вставки и обновления, это довольно тривиально преодолеть.

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