精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

線程共享的DbContext與私有的DbContext

開發(fā) 架構(gòu)
在使用Linq to Sql做為底層ORM時,它為我們提供的數(shù)據(jù)上下文為DataContext對象,實現(xiàn)上我們通過拖動生成的DBML文件,它們都是繼承自 System.Data.Linq.DataContext類型的,所以DataContext就是LINQ數(shù)據(jù)對象的基類,有時,我們可以通過這種類的多態(tài)性來動態(tài)創(chuàng)建DB的實例。

在使用Linq to Sql做為底層ORM時,它為我們提供的數(shù)據(jù)上下文為DataContext對象,實現(xiàn)上我們通過拖動生成的DBML文件,它們都是繼承自 System.Data.Linq.DataContext類型的,所以DataContext就是LINQ數(shù)據(jù)對象的基類,有時,我們可以通過這種類的多態(tài)性來動態(tài)創(chuàng)建DB的實例。

在每個DataContext類中,它有幾個實例的構(gòu)造方法,用來讓你創(chuàng)建DataContext的實例,如下:

  1. /// <summary>  
  2.          /// 使用默認(rèn)的連接串創(chuàng)建實現(xiàn)(每拖一次數(shù)據(jù)庫,就會產(chǎn)生一個連接串)  
  3.          /// </summary>  
  4.          public DataClasses1DataContext() :   
  5.                  base(global::test.Properties.Settings.Default.EEE114ConnectionString, mappingSource)  
  6.          {  
  7.              OnCreated();  
  8.          }  
  9.          /// <summary>  
  10.          /// 使用指定的連接串,可能配置在config文件里  
  11.          /// </summary>  
  12.          /// <param name="connection"></param>  
  13.          public DataClasses1DataContext(string connection) :   
  14.                  base(connection, mappingSource)  
  15.          {  
  16.              OnCreated();  
  17.          }  
  18.          /// <summary>  
  19.          /// 使用使用了IDbConnection接口的對象創(chuàng)建實例  
  20.          /// </summary>  
  21.          /// <param name="connection"></param>  
  22.          public DataClasses1DataContext(System.Data.IDbConnection connection) :   
  23.                  base(connection, mappingSource)  
  24.          {  
  25.              OnCreated();  
  26.          }  
  27.          /// <summary>  
  28.          /// 使用連接串和數(shù)據(jù)庫的映射文件來建立實例,mappingSource可能是一個XML文件  
  29.          /// </summary>  
  30.          /// <param name="connection"></param>  
  31.          /// <param name="mappingSource"></param>  
  32.          public DataClasses1DataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) :   
  33.                  base(connection, mappingSource)  
  34.          {  
  35.              OnCreated();  
  36.          } 

而我們在實現(xiàn)項目開發(fā)中,可能用第二種比較多,即

  1. DataClasses1DataContext db=new LINQ.DataClasses1DataContext(System.Configuration.ConfigurationManager.ConnectionStrings["XXB"].ToString()) 

這樣,在開發(fā)環(huán)境與生成環(huán)境只要配置一個CONFIG文件即可。靈活。

而今天的主題是線程共享的DbContext與私有的DbContext,所以開始書歸正轉(zhuǎn)了,對于ado.net架構(gòu)中,我們往往使用一個static全局對象來完成數(shù)據(jù)訪問工作,而在linq to sql中,如果你建立一個static對象,它會出現(xiàn)很多問題,這在實現(xiàn)開發(fā)過程中才可以體會到,所以,今天要說的不是static對象。

一 線程共享的DbContext,說清楚一點就是在一個線程內(nèi),你的DataContext對象是共享的,是一個對象,不是new出很多個datacontext對象來,這事實上是一種單例模式的體現(xiàn),這沒有問題,它解決了static對象所產(chǎn)生的問題,而又滿足了多表關(guān)聯(lián)查詢時出現(xiàn)(不能實現(xiàn)不同數(shù)據(jù)上下文件的引用,linq to sql和Ef都是這樣的)的問題。

代碼:

datacontext生成工廠:

  1. /// <summary>  
  2.      /// 數(shù)據(jù)庫建立工廠  
  3.      /// Created By : 張占嶺  
  4.      /// Created Date:2011-10-14  
  5.      /// Modify By:  
  6.      /// Modify Date:  
  7.      /// Modify Reason:  
  8.      /// </summary>  
  9.      internal sealed class DbFactory  
  10.      {  
  11.          #region Fields  
  12.          static System.Timers.Timer sysTimer = new System.Timers.Timer(10000);  
  13.          volatile static Dictionary<Thread, DbContext[]> divDataContext = new Dictionary<Thread, DbContext[]>();  
  14.          #endregion  
  15.    
  16.          #region Constructors  
  17.          /// <summary>  
  18.          /// 類構(gòu)造方法  
  19.          /// </summary>  
  20.          static DbFactory()  
  21.          {  
  22.              sysTimer.AutoReset = true;  
  23.              sysTimer.Enabled = true;  
  24.              sysTimer.Elapsed += new System.Timers.ElapsedEventHandler(sysTimer_Elapsed);  
  25.              sysTimer.Start();  
  26.          }  
  27.          #endregion  
  28.    
  29.          #region  Static Methods  
  30.    
  31.          /// <summary>  
  32.          /// 訂閱Elapsed事件的方法  
  33.          /// </summary>  
  34.          /// <param name="sender"></param>  
  35.          /// <param name="e"></param>  
  36.          static void sysTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)  
  37.          {  
  38.              List<Thread> list = divDataContext.Keys.Where(item => item.ThreadState == ThreadState.Stopped).ToList();  
  39.              for (int index = 0; index < list.Count; index++)  
  40.              {  
  41.                  for (int refer = 0; refer < divDataContext[list[index]].Length; refer++)  
  42.                      if (divDataContext[list[index]][refer] != null)  
  43.                      {  
  44.                          divDataContext[list[index]][refer].Dispose();  
  45.                          divDataContext[list[index]][refer] = null;  
  46.                      }  
  47.                  divDataContext.Remove(list[index]);  
  48.                  list[index] = null;  
  49.              }  
  50.          }  
  51.          /// <summary>  
  52.          /// 通過工廠的制造模式獲取相應(yīng)的LINQ數(shù)據(jù)庫連接對象  
  53.          /// </summary>  
  54.          /// <param name="dbName">數(shù)據(jù)庫名稱(需要與真實數(shù)據(jù)庫名稱保持一致)</param>  
  55.          /// <returns>LINQ數(shù)據(jù)庫連接對象</returns>  
  56.          public static DbContext Intance(string dbName)  
  57.          {  
  58.              return Intance(dbName, Thread.CurrentThread, 10);  
  59.          }  
  60.    
  61.          /// <summary>  
  62.          /// 通過工廠的制造模式獲取相應(yīng)的LINQ數(shù)據(jù)庫連接對象  
  63.          /// </summary>  
  64.          /// <param name="dbName"></param>  
  65.          /// <param name="dbCount"></param>  
  66.          /// <param name="dbIndex"></param>  
  67.          /// <returns></returns>  
  68.          public static DbContext Intance(string dbName, int dbCount, int dbIndex)  
  69.          {  
  70.              return Intance(dbName, Thread.CurrentThread, dbCount, dbIndex);  
  71.          }  
  72.    
  73.          /// <summary>  
  74.          /// 通過工廠的制造模式獲取相應(yīng)的LINQ數(shù)據(jù)庫連接對象  
  75.          /// </summary>  
  76.          /// <param name="dbName">數(shù)據(jù)庫名稱(需要與真實數(shù)據(jù)庫名稱保持一致)</param>  
  77.          /// <param name="thread">當(dāng)前線程引用的對象</param>  
  78.          /// <param name="dbCount">linq to sql數(shù)據(jù)庫數(shù)量</param>  
  79.          /// <param name="dbIndex">當(dāng)前索引</param>  
  80.          /// <returns>LINQ對象上下文</returns>  
  81.          public static DbContext Intance(string dbName, Thread thread, int dbCount, int dbIndex)  
  82.          {  
  83.              if (!divDataContext.Keys.Contains(thread))  
  84.              {  
  85.                  divDataContext.Add(thread, new DbContext[dbCount]);  
  86.              }  
  87.              if (divDataContext[thread][dbIndex] == null)  
  88.              {  
  89.                  divDataContext[thread][dbIndex] = new DbContext(dbName);  
  90.              }  
  91.              return divDataContext[thread][dbIndex];  
  92.          }  
  93.    
  94.          /// <summary>  
  95.          /// 通過工廠的制造模式獲取相應(yīng)的LINQ數(shù)據(jù)庫連接對象  
  96.          /// </summary>  
  97.          /// <param name="dbName"></param>  
  98.          /// <param name="thread"></param>  
  99.          /// <returns></returns>  
  100.          public static DbContext Intance(string dbName, Thread thread)  
  101.          {  
  102.              return Intance(dbName, thread, 10);  
  103.          }  
  104.          #endregion  
  105.    
  106.      } 

具體領(lǐng)域數(shù)據(jù)對象創(chuàng)建時代碼如下:

  1. /// <summary>  
  2.      /// XXB數(shù)據(jù)庫基類  
  3.      /// </summary>  
  4.      public class XXB_DataBase : DataBase  
  5.      {  
  6.          private readonly static string _conn;  
  7.          static XXB_DataBase()  
  8.          {  
  9.              if (ConfigurationManager.ConnectionStrings["XXB"] == null)  
  10.                  throw new Exception("請設(shè)置XXB配置字符");  
  11.              else 
  12.                  _conn = ConfigurationManager.ConnectionStrings["XXB"].ToString();  
  13.          }  
  14.          public XXB_DataBase()  
  15.              : base(DbFactory.Intance(_conn, 21))  
  16.          { }  
  17.    
  18.      } 

二 私有的DbContext,它要求你為每個表都建立一個repository對象,用戶對表進(jìn)行CURD操作,而它們都繼承一個database,在 database里有唯一創(chuàng)建datacontext的入口,這樣在做多表關(guān)聯(lián)時,使用的是同一個datacontext對象,所以不會出現(xiàn)“不能實現(xiàn)不同數(shù)據(jù)上下文件的引用”這種問題,但這樣方式感覺很不爽,因為你必須把所有多表關(guān)聯(lián)的業(yè)務(wù)邏輯,寫在DAL層,這是很郁悶的,因為一般我們會把它放在BLL層(更有利于業(yè)務(wù)的組合與重用)。

代碼:

具體領(lǐng)域數(shù)據(jù)基類:

  1. /// <summary>  
  2.      /// XXB數(shù)據(jù)基類  
  3.      /// </summary>  
  4.      public abstract class XXBBase : DataBase  
  5.      {  
  6.          public XXBBase()  
  7.              : base(new LINQ.DataClasses1DataContext(System.Configuration.ConfigurationManager.ConnectionStrings["XXB"].ToString()))  
  8.          { }  
  9.      } 

統(tǒng)一數(shù)據(jù)基類:

  1. /// <summary>  
  2.      /// 標(biāo)準(zhǔn)數(shù)據(jù)操作基類  
  3.      /// </summary>  
  4.      public abstract class DataBase : IRepository  
  5.      {  
  6.          /// <summary>  
  7.          /// 數(shù)據(jù)訪問對象(只對子類可見)  
  8.          /// </summary>  
  9.          protected DataContext DB;  
  10.    
  11.          #region Constructors  
  12.          public DataBase(DataContext db)  
  13.              : this(() => { return db; })  
  14.          { }  
  15.          public DataBase(Func<DataContext> func)  
  16.          {  
  17.              this.DB = func();  
  18.          }  
  19.          #endregion  
  20.    
  21.          #region DBContext SubmitChanges  
  22.          /// <summary>  
  23.          /// XXB默認(rèn)提交【重寫時候可能需要寫入自定義的類似約束的邏輯】  
  24.          /// </summary>  
  25.          protected virtual void SubmitChanges()  
  26.          {  
  27.              ChangeSet cSet = DB.GetChangeSet();  
  28.              if (cSet.Inserts.Count > 0 
  29.                  || cSet.Updates.Count > 0 
  30.                  || cSet.Deletes.Count > 0)  
  31.              {  
  32.                  try 
  33.                  {  
  34.                      DB.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);  
  35.                  }  
  36.                  catch (System.Data.Linq.ChangeConflictException)  
  37.                  {  
  38.                      foreach (System.Data.Linq.ObjectChangeConflict occ in DB.ChangeConflicts)  
  39.                      {  
  40.                          occ.Resolve(System.Data.Linq.RefreshMode.OverwriteCurrentValues);  
  41.                          occ.Resolve(System.Data.Linq.RefreshMode.KeepCurrentValues);  
  42.                          occ.Resolve(System.Data.Linq.RefreshMode.KeepChanges);  
  43.                      }  
  44.                      DB.SubmitChanges();  
  45.                  }  
  46.              }  
  47.          }  
  48.    
  49.          #endregion  
  50.    
  51.          #region IRepository 成員  
  52.    
  53.          public virtual void Update<TEntity>(TEntity entity) where TEntity : class 
  54.          {  
  55.              this.SubmitChanges();  
  56.    
  57.          }  
  58.    
  59.          public virtual void Update<TEntity>(IEnumerable<TEntity> list) where TEntity : class 
  60.          {  
  61.              list.ToList().ForEach(entity =>  
  62.              {  
  63.                  this.Update<TEntity>(entity);  
  64.              });  
  65.          }  
  66.    
  67.          public virtual void Insert<TEntity>(TEntity entity) where TEntity : class 
  68.          {  
  69.              DB.GetTable<TEntity>().InsertOnSubmit(entity);  
  70.              this.SubmitChanges();  
  71.          }  
  72.    
  73.          public virtual void Insert<TEntity>(IEnumerable<TEntity> list) where TEntity : class 
  74.          {  
  75.              DB.GetTable<TEntity>().InsertAllOnSubmit<TEntity>(list);  
  76.              this.SubmitChanges();  
  77.          }  
  78.    
  79.          public virtual TEntity InsertGetIDENTITY<TEntity>(TEntity entity) where TEntity : class 
  80.          {  
  81.              this.Insert<TEntity>(entity);  
  82.              return GetModel<TEntity>(i => i == entity).FirstOrDefault();  
  83.          }  
  84.    
  85.          public virtual void Delete<TEntity>(TEntity entity) where TEntity : class 
  86.          {  
  87.              DB.GetTable<TEntity>().DeleteOnSubmit(entity);  
  88.              this.SubmitChanges();  
  89.          }  
  90.    
  91.          public virtual void Delete<TEntity>(IEnumerable<TEntity> list) where TEntity : class 
  92.          {  
  93.              DB.GetTable<TEntity>().DeleteAllOnSubmit<TEntity>(list);  
  94.              this.SubmitChanges();  
  95.          }  
  96.    
  97.          public virtual IQueryable<TEntity> GetModel<TEntity>() where TEntity : class 
  98.          {  
  99.              return this.DB.GetTable<TEntity>();  
  100.          }  
  101.    
  102.          public virtual IQueryable<TEntity> GetModel<TEntity>(System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate) where TEntity : class 
  103.          {  
  104.              return GetModel<TEntity>().Where(predicate);  
  105.          }  
  106.    
  107.          public virtual TEntity Find<TEntity>(params object[] keyValues) where TEntity : class 
  108.          {  
  109.              var mapping = DB.Mapping.GetTable(typeof(TEntity));  
  110.              var keys = mapping.RowType.IdentityMembers.Select((m, i) => m.Name + " = @" + i).ToArray();  
  111.              TEntity entityTEntity = DB.GetTable<TEntity>().Where(String.Join(" && ", keys), keyValues).FirstOrDefault();  
  112.              if (entityTEntity != null)  
  113.                  DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, entityTEntity);  
  114.              return entityTEntity;  
  115.          }  
  116.    
  117.          #endregion  
  118.      } 

而用戶模塊User_InfoRepository在做多表關(guān)聯(lián)時,是這樣完成的:

  1. public class User_InfoRepository : XXBBase  
  2.      {  
  3.          /// <summary>  
  4.          /// 需要把Join的表關(guān)系寫在這里  
  5.          /// </summary>  
  6.          /// <returns></returns>  
  7.          public IQueryable<User_Info> GetDetailModel()  
  8.          {  
  9.              var linq = from data1 in base.GetModel<User_Info>()  
  10.                         join data2 in base.GetModel<User_Profile>() on data1.UserID equals data2.UserID  
  11.                         select data1;  
  12.              return linq;  
  13.          }  
  14.      } 

原文鏈接:http://www.cnblogs.com/lori/archive/2012/08/23/2653426.html

責(zé)任編輯:林師授 來源: 博客園
相關(guān)推薦

2021-02-04 18:04:53

DbContext開源對象

2013-09-08 21:41:10

RepositoryUnitOfWorkDbContext

2025-04-18 08:45:26

2024-10-21 07:15:08

2024-01-02 10:31:14

JVM內(nèi)存整體

2011-09-29 09:48:39

私有云PaaS云計算

2012-03-27 14:25:23

私有云PaaS云計算

2011-09-15 09:31:32

云計算PaaS私有云

2013-12-16 17:17:01

OpenMp數(shù)據(jù)處理

2020-03-09 15:42:11

網(wǎng)狀網(wǎng)絡(luò)開源FreeMesh

2022-03-17 08:30:28

Python私有屬性私有方法

2020-04-27 14:43:35

私有部署繪圖服務(wù)

2021-07-01 20:24:01

開源開源工具虛擬專用網(wǎng)絡(luò)

2016-07-06 15:56:05

云計算

2011-10-21 14:24:03

私有云云計算

2013-01-21 10:51:33

私有云EMCSyncplicity

2011-05-23 16:12:39

私有云

2024-05-11 09:41:45

線程安全代碼

2024-04-08 10:09:37

TTLJava框架

2013-07-17 09:40:13

虛擬化云計算
點贊
收藏

51CTO技術(shù)棧公眾號

久久精品国产精品青草| 亚洲动漫在线观看| 一区二区在线观看免费视频播放| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 少妇久久久久久久久久| 欧美成人毛片| 午夜一区二区三区在线观看| 欧美亚洲爱爱另类综合| 国产日韩欧美视频在线观看| 一本色道久久综合亚洲精品高清| xxxx欧美18另类的高清| 久久久久成人精品无码中文字幕| 国产69精品久久| 午夜精品福利一区二区蜜股av | 96pao国产成视频永久免费| 日韩欧美亚洲视频| 日韩在线二区| 日韩国产欧美精品在线| 亚洲黄色av片| 欧美日韩激情电影| 亚洲一区免费在线观看| 亚洲一区二区高清视频| 水中色av综合| 国产一区在线看| 国产精品黄视频| 日本天堂网在线观看| 麻豆chinese极品少妇| 超免费在线视频| 国产精品黄色在线观看| 久久综合给合久久狠狠色| 99久久精品免费看国产交换| 日本网站在线观看一区二区三区 | 欧美精品videos极品| 国产videos久久| 精品处破学生在线二十三| 在线黄色免费看| 姬川优奈av一区二区在线电影| 亚洲国产日韩av| 激情五月五月婷婷| 日韩免费网站| 国产精品麻豆久久久| 欧美精品一区二区三区在线看午夜 | 久久久久久欧美精品色一二三四| 亚洲精品免费在线观看视频| 狠狠色丁香久久婷婷综合_中| 日韩av电影手机在线观看| www.国产成人| 国产精品久久777777毛茸茸| 国内精品视频久久| 免费视频一二三区| 午夜国产精品视频免费体验区| 久久久精品网站| 欧美风情第一页| 99热在线成人| 日韩视频免费看| 97在线观看免费高| 91成人免费| 久久99精品久久久久久琪琪| 私库av在线播放| 欧美日韩爆操| 久久全球大尺度高清视频| jizz国产免费| 国产欧美日韩一级| 18久久久久久| 无码任你躁久久久久久久| 美女视频一区免费观看| 国产精品欧美激情在线播放| 中文字幕欧美人妻精品一区蜜臀| 蜜桃av噜噜一区| 国产一区视频在线播放| 精品久久久无码中文字幕| 风流少妇一区二区| 精品无码久久久久国产| 经典三级在线| 中文字幕佐山爱一区二区免费| 一级黄色片播放| 欧美另类老肥妇| 色先锋资源久久综合| 在线观看av网页| 国产在线不卡一区二区三区| 精品国产免费人成在线观看| 玖玖爱在线观看| 99视频精品视频高清免费| 欧美精品一区二区免费| 永久免费看片在线播放| 日本午夜精品视频在线观看| 亚洲自拍av在线| 三级在线播放| 亚洲色图欧美激情| 尤物av无码色av无码| 69堂精品视频在线播放| 91精品国产综合久久蜜臀| 97人妻精品一区二区三区免费| 中文精品一区二区| 91精品在线观看国产| 51精品久久久久久久蜜臀| 欧美色图校园春色| 色综合久久中文| 日韩中文字幕欧美| 日本免费观看视| 精品综合久久久久久8888| 国产精品日韩高清| se在线电影| 亚洲aaa精品| 福利视频999| 西野翔中文久久精品国产| 日韩中文综合网| 亚洲黄色激情视频| 国产一区二区在线观看免费 | 性生交大片免费看女人按摩| 2017欧美狠狠色| 亚洲一区 在线播放| 深夜成人福利| 亚洲国产成人精品久久| 午夜激情福利电影| 亚洲男人影院| 国产成人精品日本亚洲11| 午夜免费播放观看在线视频| 午夜精品福利视频网站| 青娱乐国产精品视频| 国产在视频线精品视频www666| 欧美国产日韩一区二区在线观看| 亚洲视频在线观看一区二区| 久久午夜色播影院免费高清| 99热久久这里只有精品| 99久久久国产| 中文字幕亚洲在线| www.国产高清| 波多野结衣在线aⅴ中文字幕不卡| 黄色免费高清视频| av在线播放一区| 亚洲欧美精品在线| 国产无遮无挡120秒| 国产精品一区免费在线观看| 夜夜爽99久久国产综合精品女不卡| 高清在线视频不卡| 精品国产免费久久| 欧美亚洲日本在线| 国产在线精品免费| 天堂av免费看| 亚洲tv在线| 最新国产精品拍自在线播放| 中文字幕免费高清在线观看| 国产人妖乱国产精品人妖| 欧美日韩亚洲第一| 亚洲人成网站77777在线观看| 91sao在线观看国产| 无码国产伦一区二区三区视频 | 日韩国产在线不卡视频| 久久精品色欧美aⅴ一区二区| 92看片淫黄大片看国产片| av资源免费观看| 91一区在线观看| 蜜桃传媒一区二区三区| 久久电影在线| 国产91av在线| 国产玉足榨精视频在线观看| 欧美视频一区二区三区四区| jizz日本在线播放| 精品一区二区三区在线观看| 男人天堂成人网| 91成人精品在线| 午夜剧场成人观在线视频免费观看 | 亚洲综合国产激情另类一区| 欧美精品一区二区视频| 成人免费在线观看视频| 日韩一区二区欧美| 精品国产伦一区二区三区| 一区二区三区四区亚洲| 激情综合激情五月| 午夜在线视频一区二区区别| 欧美一级二级三级| 精品九九久久| 欧美另类精品xxxx孕妇| 五月婷婷六月丁香| 在线视频中文字幕一区二区| 三上悠亚在线观看视频| 国产电影一区在线| 欧美三级一级片| 日韩精品91| 99在线影院| 欧美第一视频| 久久视频免费在线播放| 国 产 黄 色 大 片| 欧美三级免费观看| 香蕉久久久久久久| 成人三级伦理片| 少妇高清精品毛片在线视频| 一区二区三区四区电影| 精品乱码一区二区三区| 日韩在线电影| 91成人免费观看网站| 日本最黄一级片免费在线| 日韩免费性生活视频播放| 亚洲中文字幕无码爆乳av| 亚洲欧美一区二区不卡| 欧美性xxxx图片| 国模少妇一区二区三区| 成人午夜精品久久久久久久蜜臀| 成人嫩草影院| 成人在线精品视频| 欧美一级大片| 欧美夫妻性生活xx| 永久免费av片在线观看全网站| 亚洲精品国产美女| 97免费观看视频| 色婷婷av久久久久久久| 久久久久久免费观看| 国产人久久人人人人爽| 韩国三级hd两男一女| 久久er99热精品一区二区| 99色精品视频| 国产一区清纯| 男女啪啪的视频| 国产一区二区三区站长工具| 精品综合在线| 欧美日韩中出| 国产精品一区二区三区在线播放 | 国产系列在线观看| 欧美成人一级视频| 国产精品国产精品国产专区| 色天天综合色天天久久| 美女亚洲精品| 欧美成年黄网站色视频| 亚洲欧洲中文天堂| 欧美一级在线免费观看| 91精品国产欧美一区二区| 中国a一片一级一片| 欧美日韩激情视频8区| 国产亚洲成人av| 亚洲欧美成人一区二区三区| 手机毛片在线观看| 久久久久久久久久久黄色| 国产熟女高潮一区二区三区| 成人免费毛片app| 人妻精油按摩bd高清中文字幕| 精品一区二区三区久久久| 成人亚洲视频在线观看| 欧美在线综合| 成人在线观看a| 久久亚洲风情| 国产熟人av一二三区| 老司机免费视频久久| 超碰97人人射妻| 亚洲永久免费精品| 黄色av网址在线播放| 在线亚洲国产精品网站| 99视频在线免费播放| 国产亚洲综合精品| 欧美国产亚洲一区| 麻豆久久精品| 亚洲人辣妹窥探嘘嘘| 日韩国产一区二| 91国产精品视频在线观看| 日本最新不卡在线| 免费看污黄网站| 久久91精品久久久久久秒播| 午夜大片在线观看| 国产在线精品一区二区不卡了 | 国产欧美综合色| 久操视频在线观看免费| 中文字幕一区免费在线观看| 三级在线观看免费大全| 一区二区三区不卡视频在线观看 | 黄网站免费在线播放| 成年人精品视频| 牛牛电影国产一区二区| 97久久精品在线| 成人日韩在线观看| 国产日韩欧美在线观看| 亚洲国产视频二区| 精品国产免费久久久久久尖叫| 亚洲成人一品| 正义之心1992免费观看全集完整版| 亚洲午夜精品一区二区国产| www.夜夜爱| 久久不射2019中文字幕| 污污网站免费观看| 丁香亚洲综合激情啪啪综合| 黄色a一级视频| 国产精品免费久久久久| 免费在线观看av网址| 精品色蜜蜜精品视频在线观看| 国产裸体美女永久免费无遮挡| 欧美一级午夜免费电影| 视频二区在线观看| 最新中文字幕亚洲| 日本中文字幕中出在线| 国产福利成人在线| 精品中文在线| 日本亚洲自拍| 欧美日韩精品免费观看视频完整| 久久久久久久久久久免费视频| 国产一区在线观看视频| 中文字幕av网址| 亚洲激情男女视频| 国产字幕在线观看| 欧美sm极限捆绑bd| 91在线播放网站| 7m精品福利视频导航| 国产精品视频一区二区三区| 久久免费99精品久久久久久| 亚洲精品一区二区在线看| 免费黄色福利视频| 国产精品一二三四五| 国产一二三四区在线| 亚洲成人动漫在线观看| 国产美女裸体无遮挡免费视频| 精品亚洲国产视频| 先锋影音在线资源站91| 国产精品99导航| 欧美久久香蕉| 免费看日本黄色| 久久电影网电视剧免费观看| 成人影视免费观看| 亚洲一区日韩精品中文字幕| 97人妻精品一区二区三区| 美女日韩在线中文字幕| 国产日韩欧美大片| 日本特黄久久久高潮| 国产精品伦子伦| 亚洲综合免费观看高清完整版在线 | 免费a级黄色片| 亚洲综合视频网| 国产丝袜视频在线观看| 色黄久久久久久| 欧美日韩不卡| 欧美精品中文字幕一区二区| 136国产福利精品导航网址| 天天操夜夜操很很操| 国产精品的网站| 成人黄色激情视频| 国产亚洲一级高清| 在线天堂资源www在线污| 国产一区二区无遮挡| 亚洲黄色av| 亚洲婷婷在线观看| 亚洲一区二区三区美女| av av片在线看| 欧美wwwxxxx| 日韩欧美中文字幕一区二区三区 | 亚洲二区精品| 精品无码av一区二区三区| 亚洲精品少妇30p| 国产丰满美女做爰| 欧美精品在线播放| 爱爱精品视频| 日韩小视频在线播放| gogo大胆日本视频一区| 五月天综合在线| 日韩禁在线播放| 日本免费一区二区三区四区| 欧美下载看逼逼| 日韩精品欧美精品| 一级片久久久久| 欧美高清激情brazzers| a级网站在线播放| 国产91精品入口17c| 激情亚洲网站| 9.1成人看片| 欧美影院精品一区| 女女色综合影院| 3d动漫啪啪精品一区二区免费| 在线成人黄色| 91精品人妻一区二区| 欧美三级日韩三级| www红色一片_亚洲成a人片在线观看_| 亚洲专区在线视频| 一本不卡影院| 婷婷色一区二区三区| 欧美日韩一级片在线观看| 麻豆tv在线| 国内成+人亚洲| 日本一不卡视频| 欧美黄色aaa| 日韩电视剧在线观看免费网站| 成人免费av电影| 青草全福视在线| 91啦中文在线观看| 中文字幕永久在线视频| 久久99亚洲热视| 久久99国产精品视频| 欧美日韩一区二区三区69堂| 亚洲一区二区精品久久av| 精品电影在线| 99视频国产精品免费观看| 亚洲影院在线| 国产成人久久久久| 亚洲激情第一页| www欧美在线观看| 黄色影院一级片| 亚洲另类在线制服丝袜| 五月婷婷开心中文字幕| 国产日韩欧美夫妻视频在线观看 | 成年人在线观看视频免费| 1000部国产精品成人观看| 亚洲欧美日韩动漫| 91日本在线观看| 久久一区亚洲| 国产亚洲成人精品|