所有内容都在代码中。 在调用Do方法之前,是还没有访问数据的 在调用Do方法之后,就集中一起访问数据。 详情请看注释。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication36 { class Program { static void Main(string[] args) { DB db = new DB(); //db是一个获取数据的动作集合 A_Service service = new A_Service(); //A_Service相当于DAL层 service.db = db; //Service(DAL)依赖于db,当每调用一次方法时,都会把动作添加到db中 A a = service.GetA(); //开始获得数据 Console.WriteLine(a.C); //在没有调用DO之前,是不会访问数据库的 db.Do(); //将所有的操作集中一起访问数据库,在Web中一次请求只访问一次数据库,达到提升性能的目的,此方法应该在Controller的时候调用 Console.WriteLine(a.C); //调用DO后,数据访问出来了。 } } class DB { public List<Action> Action { get; set; } public void Do() { foreach (var i in Action) { i(); } } } class A_Service { public DB db { get; set; } public A GetA() { A a = new A(); if (db.Action == null) db.Action = new List<Action>(); db.Action.Add(delegate { a.B = 12; a.C = 35; }); return a; } } /// <summary> /// 实体类 /// </summary> class A { public int B { get; set; } public int C { get; set; } } }