Linq to sql 只读LINQ到SQL

Linq to sql 只读LINQ到SQL,linq-to-sql,readonly,Linq To Sql,Readonly,我使用LINQtoSQL来访问我的数据库,但我只阅读,从不插入、更新或删除任何内容。有没有办法为此优化LINQ2SQL?有。默认情况下,Linq 2 SQL将缓存从数据库读取的所有数据。它需要这样做来跟踪应用于对象的任何更改,以便在调用SubmitChanges时生成必要的insert/update/delete语句 如果你只是在读数据,这是没有必要的。您可以通过在DataContext中将属性设置为false来关闭对象跟踪。我被告知的一件事是避免使用生成的记录类 也就是说,如果您有一个User

我使用LINQtoSQL来访问我的数据库,但我只阅读,从不插入、更新或删除任何内容。有没有办法为此优化LINQ2SQL?

有。默认情况下,Linq 2 SQL将缓存从数据库读取的所有数据。它需要这样做来跟踪应用于对象的任何更改,以便在调用SubmitChanges时生成必要的insert/update/delete语句


如果你只是在读数据,这是没有必要的。您可以通过在DataContext中将属性设置为false来关闭对象跟踪。

我被告知的一件事是避免使用生成的记录类

也就是说,如果您有一个Users表,L2S将为您创建一个User类,它将从数据库返回该类。您不应该直接使用它,而是应该创建一个具有所有相同属性但没有其他属性的阴影类,并立即将数据复制到这些记录中供您使用。事实上,如果它是只读的,您可以在ctor中分配它们,并且只有公共getter:

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);
这避免了处理再次写出对象的可能性所需的大量开销