只读LINQ to SQL

时间:2010-09-17 19:00:39

标签: linq-to-sql readonly

我正在使用LINQ to SQL来访问我的数据库,但我只是在阅读,我从不插入,更新或删除任何内容。有没有办法优化LINQ2SQL呢?

2 个答案:

答案 0 :(得分:5)

是的。 Linq 2 SQL默认会缓存您从数据库中读取的所有数据。它需要执行此操作来跟踪您应用于对象的任何更改,因此当您调用SubmitChanges()时,它可以生成必要的插入/更新/删除语句

如果您只是在阅读数据,那么这是无关紧要的。您可以通过在DataContext上将ObjectTrackingEnabled属性设置为false来关闭对象跟踪。

答案 1 :(得分:0)

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

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

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