代码之家  ›  专栏  ›  技术社区  ›  Sisiutl

只读Linq to SQL

  •  2
  • Sisiutl  · 技术社区  · 15 年前

    我正在使用LinqToSQL访问我的数据库,但我只是在阅读,从不插入、更新或删除任何内容。有没有方法可以为此优化linq2sql?

    2 回复  |  直到 15 年前
        1
  •  5
  •   jeroenh    15 年前

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

    如果你只是在读数据,这是不必要的。可以通过设置 ObjectTrackingEnabled 属性设置为false。

        2
  •  0
  •   James Curran    15 年前

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

    也就是说,如果你有 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);
    

    这避免了处理再次写出对象的可能性所需的大量开销。