Установить значение поля службы в динамических данных

В моем проекте многие таблицы связаны с таблицей aspnet_Application внешним ключом ApplicationId. Я не хочу, чтобы пользователи просматривали или редактировали его, поэтому я ищу способ установить это значение поля таблицы sql до выполнения запроса на вставку. У меня по-прежнему включены строительные леса для этого столбца (чтобы DD генерировал правильный сценарий sql), но я скрываю этот столбец/поле на всех моих страницах редактирования/списка/вставки.

В идеале я ищу место для ввода моего кода прямо перед выполнением DynamicInsert для любой таблицы в моем классе LinqToSql.

Спасибо


person Roman Royter    schedule 28.03.2009    source источник


Ответы (2)


Поэтому, немного покопавшись, я нашел приемлемое решение. Я создал частичный класс для своего контекста данных и добавил частичный метод Insert_ для каждой таблицы, связанной с aspnet_Applications. В каждом методе я устанавливаю в поле ApplicationId идентификатор текущего приложения.

Это выглядит так:

public partial class MyDataContext
{
    partial void InsertMyTable(MyTable instance)
    {
        instance.ApplicationId = HttpContext.Current.Session["ApplicationId"] as Guid?;
    this.ExecuteDynamicInsert(instance);
    }
}

Обратите внимание, что в этом методе нельзя выполнять другие операторы LINQ. В частности, мне пришлось хранить идентификатор приложения в сеансе, а не запрашивать таблицу aspnet_Applications.

Хотя это приемлемое решение, оно не идеально (много повторяющегося кода), поэтому, если кто-то знает лучше, бросьте мне кость здесь :)

person Roman Royter    schedule 29.03.2009

В будущем лучшим решением было бы использовать часть DomainService предварительного просмотра .Net RIA Services, только что выпущенного на MIX09, см. видео здесь:

Службы .NET RIA — создание приложений, управляемых данными, с помощью Microsoft Silverlight и Microsoft ASP.NET

Доступ к данным Microsoft ASP.NET 4.0: шаблоны успешного использования веб-форм

Первый представляет собой введение в .net RIA Services с точки зрения Silverlight, но в большей степени он относится к DD. Второй — презентация Дэвида Эббо на MIX и показывает, как DomainService работает с DD. Я думаю, что это путь вперед, который вы можете сделать. вся ваша бизнес-логика здесь, в DomainService.

person Wizzard    schedule 29.03.2009