Где разместить дополнительную функциональность для уровня базы данных (Linq-to-SQL) - PullRequest
2 голосов
/ 10 октября 2008

Каков наилучший метод для реализации дополнительных функций на уровне базы данных, который использует Linq-to-SQL? В настоящее время я смотрю на реализацию функций для добавления информации на основе предустановок и аналогичных задач?

Для вставки, обновления и удаления требуется доступ к DataContext, а в классах Table у вас нет доступа к контексту. Я видел решения, которые используют Singletons, но это похоже на взлом, и мне интересно, сталкивался ли кто-нибудь еще с этой проблемой и каковы были ваши решения? Есть ли лучший способ все вместе реализовать аналогичную функциональность.

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


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

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

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

Пример:

db.Customers.Where(c => c.CustomerID == 5).AddOrder(orderDetails);

Мне кажется, что я не могу выразить свою проблему словами, чтобы она была понятна:)

Ответы [ 4 ]

1 голос
/ 31 августа 2011

Если вы просто добавили некоторые функции-оболочки вокруг linq или любого другого класса в целом, не могли бы вы использовать подход с расширением в C # 3 и более поздних версиях, используя статические вспомогательные методы в следующих строках:

public static class StringExtensions 
{
    public static int ToInt(this string oString)
    {
        return int.Parse(oString);
    }
}

Таким образом, вы могли бы иметь статический вспомогательный класс, предлагающий вспомогательные функции, специфичные для определенных классов, которые вы можете переносить между проектами или, возможно, помещать в отдельную DLL и просто импортировать, где это необходимо?

1 голос
/ 26 октября 2008

Классы сущностей в Linq to SQL являются частичными. Вы можете дополнить их нужными вам правилами.

Или вы можете создавать свои собственные бизнес-сущности из сущностей Linq to SQL. Тогда ваши субъекты бизнеса будут содержать правила о том, когда и что делать.

0 голосов
/ 11 октября 2008

Вы можете использовать общие расширения контекста данных для общих методов доступа к данным, таких как вставка, удаление и т. Д., Как описано в http://weblogs.asp.net/stephenwalther/archive/2008/08/26/asp-net-mvc-tip-38-simplify-linq-to-sql-with-extension-methods.aspx., и частичных классов для менее распространенной функциональности, как будет предложено.

0 голосов
/ 10 октября 2008

Ненавижу это говорить, но как насчет хранимых процедур?

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

...