Эффективное использование LINQ2SQL - PullRequest
1 голос
/ 25 мая 2011

Я ОГРОМНЫЙ фанат LINQ2SQL.Но я использую много DataContext в каждой функции и последующих запросах.Тем не менее, я знаю, что есть лучший способ сделать это ...

Что-то вроде этого, может быть?

 protected dbMYDataContext FA(dbMYDataContext dt)
    {
         using (dt = new dbMYDataContext())
        {
            return dt;
        }

    }

 protected void FunctionA() : FA
        {

        }
 protected void FunctionB() : FA
        {

        }

Так что мантра такова, что когда вы хотите создать DataContextнаследовать или вызывать эту функцию FA.Но я получаю ошибку, когда наследую ее.В чем проблема и каковы оптимальные методы постоянного сокращения использования DataContext.

Советы?

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Использовать шаблон единицы работы

См. Эту статью.

1 голос
/ 25 мая 2011

Есть несколько вещей, которые я делаю при использовании L2S, которые значительно улучшают ситуацию.

1) Используйте оператор using , как вы показали в своем вопросе.Это правильный способ делать вещи

2) Если я делаю запрос только для чтения ... Я устанавливаю (DataContext) .ObjectTrackingEnabled = false.Это в основном не отслеживает объекты и немного повышает производительность.По умолчанию он имеет значение true.

3) Если я использую запрос более 5 раз в программе, я предварительно компилирую запрос, чтобы все произошло быстрее, чем они бы.Есть несколько предостережений с этим подходом, но использование .ToList () в конце, кажется, исправит их все для меня: D Ссылка на продолжение: http://www.codinghorror.com/blog/2010/03/compiled-or-bust.html

Стоит помнить, что каждый раз, когда вы создаетеконтекст данных, вы получаете последние данные.Например, вы создаете экземпляр класса контекста данных, другой пользователь обновляет таблицу, вы ее не увидите (или, по крайней мере, я никогда этого не сделаю, но это может быть способ, которым я делаю вещи. Так что будьте осторожны).:)

Пример кода (не проверено) :

protected void MyFunction()
{
    using(MyDataContext db = new MyDataContext())
    {
         // uncomment the following line for read only queries
         // db.ObjectTrackingEnabled = false;
         // implementation here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...