LINQ to SQL только для чтения - PullRequest
       7

LINQ to SQL только для чтения

2 голосов
/ 17 сентября 2010

Я использую LINQ to SQL для доступа к своей базе данных, но я только читаю, я никогда ничего не вставляю, не обновляю и не удаляю. Есть ли способы оптимизировать LINQ2SQL для этого?

Ответы [ 2 ]

5 голосов
/ 17 сентября 2010

Да, есть. По умолчанию Linq 2 SQL будет кэшировать все данные, которые вы читаете из БД. Это необходимо сделать для отслеживания любых изменений, которые вы применяете к своим объектам, поэтому он может генерировать необходимые операторы вставки / обновления / удаления при вызове SubmitChanges ()

Если вы только читаете данные, это не обязательно. Вы можете отключить отслеживание объектов, установив для свойства ObjectTrackingEnabled значение false в вашем DataContext.

0 голосов
/ 17 сентября 2010

Мне сказали, что следует избегать использования сгенерированного класса записей.

То есть, если у вас есть таблица Users, L2S создаст для вас класс User, которыйэто то, что он возвращает из базы данных.Вместо того, чтобы использовать это напрямую, вы должны создать «теневой» класс - все те же свойства, но не более того, и немедленно скопировать данные в эти записи для вашего использования.На самом деле, если он будет предназначен только для чтения, вы можете назначить его в ctor и иметь только общедоступные методы получения:

class myUser
{
   public string FName {get; private set}
   public string LName {get; private set}
   public myUser(User user)
   {
       this.FName = user.FName;
       this.LName = user.LName;
   }
}



var users = from u in db.Users
            where .....
            select new myUsers(u);

Это позволяет избежать чрезмерных затрат, необходимых для возможности записиобъект снова.

...