2009-09-18 5 views
0

Я ищу реализацию LINQ to SQL, но я стараюсь понять, как мы будем добавлять бизнес-правила контроля доступа, такие как клиент, который может просматривать только их заказы. В ADO.NET данных услуг, intercptors запрос делать именно то, что я после этого, и можно увидеть, как проверить на обновление/вставка/удаление, но есть эквивалент этого:LINQ to sql interceptor

[QueryInterceptor("Orders")] 
public IQueryable<Orders> OnQueryOrders(IQueryable<Orders> orderQuery) 
{ 

     return from o in orderQuery 
     where o.Customers.ContactName == HttpContext.Current.User.Identity.Name 
     select o; 
} 

Или точн мне нужно управление через аксессуры по линии: GetOrdersByCustomer (string customerId)

+0

Лично я нахожу что-то вроде GetOrdersByCustomer намного легче понять и поддерживать. Здесь перехватчики чувствуют себя ненужными. Подумайте о следующем человеке, который должен будет поддерживать ваш код и кто не может быть таким умным, как вы. –

+0

Это было бы хорошо для простых сценариев, но я хочу разрешить гораздо более богатое построение запросов, так что в конце концов вы получите более 100 аксессуаров, что в свою очередь будет путать/пропустить/кошмар для поддержки или рефакторинга. Хотя перехватчики могут вводить в заблуждение, они позволяют работать с кодовым кодом последовательно, но думают, что мысли Джастина ближе к тому, что мы получим в итоге – steve

ответ

0

Я думаю, в этом случае лучшим решением было бы создать настоящий бизнес-уровень, который находится между уровнем приложения и классами LINQ to SQL.

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

+0

Hi Justin Да, это похоже на маршрут, который мне нужно будет взять. . Мой подход выглядит так: make my dataContext запечатан, но мои объекты данных public (т.е. таблицы в linq to sql) Вывести методы из BL, которые могут принимать функции предиката, которые затем будут добавлены в дерево выражений с помощью логика бизнес-безопасности. В моих прототипах это работает и в то время как немного запутывает изначально, то, что отображается, довольно ясно, но гибко. – steve

+0

В зависимости от объема и характера приложения создание целого BL может быть непрактичным. LINQ to SQL способен самостоятельно обрабатывать валидацию бизнес-правил. Вы можете использовать частичные классы для «перехвата» операций с данными, которые достигают аналогичной цели, как с перехватчиками запросов ADO.NET. Ознакомьтесь с этой статьей: http://msdn.microsoft.com/en-us/library/bb882671.aspx – Antony