婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SqlServer與MongoDB結合使用NHibernate

SqlServer與MongoDB結合使用NHibernate

熱門標簽:兗州電話外呼營銷系統 智能電銷機器人銷售話術 沈陽營銷電銷機器人招商 徐州ai電銷機器人原理 企業智能外呼系統價格多少 機器人外呼系統軟件存在問題 福州電銷機器人源代碼 南京400電話怎樣辦理 高德地圖標注商戶位置

本文實例為大家分享了SqlServer與MongoDB結合使用NHibernate的代碼,供大家參考,具體內容如下

Program.cs代碼內容:

class Program 
 { 
   private const string SqlServerConnectionString = 
     @"Data Source=.;Initial Catalog=SqlWithMongo;Persist Security Info=True;User ID=sa;Password=123456"; 
 
   private const string MongoConnectionString = "mongodb://localhost:27017"; 
   private const int NumberOfNodes = 1000; 
 
   private static void Main(string[] args) 
   { 
     Console.WriteLine("Clearing database..."); 
     ClearDatabases(); 
     Initer.Init(SqlServerConnectionString, MongoConnectionString); 
     Console.WriteLine("Completed"); 
 
     Console.WriteLine("Creating nodes..."); 
     //創建sqlserver的Node節點 
     CreateNodes(); 
     Console.WriteLine("Completed"); 
 
     Console.WriteLine("Linking nodes..."); 
     long milliseconds1 = LinkSqlNodes(); //創建sqlserver的LinkNode節點 
     Console.WriteLine("SQL : " + milliseconds1); 
     long milliseconds2 = LinkMongoNodes(); //同時創建Node,LinkNode節點 
     Console.WriteLine("Mongo : " + milliseconds2); 
     Console.WriteLine("Completed"); 
 
     Console.WriteLine("Fetching nodes..."); 
     long milliseconds3 = FetchSqlNodes(); //取出sqlserver節點數據 
     Console.WriteLine("SQL : " + milliseconds3); 
     long milliseconds4 = FetchMongoNodes(); //取出Mongodb節點數據 
     Console.WriteLine("Mongo : " + milliseconds4); 
     Console.WriteLine("Completed"); 
 
     Console.ReadKey(); 
   } 
 
 
   private static long FetchMongoNodes() 
   { 
     var stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
 
     for (int i = 0; i  NumberOfNodes; i++) 
     { 
       using (var unitOfWork = new UnitOfWork()) 
       { 
         var repository = new MongoNodeRepository(unitOfWork); 
 
         MongoNode node = repository.GetById(i + 1); 
         IReadOnlyListNodeLink> links = node.Links; 
       } 
     } 
     stopwatch.Stop(); 
     return stopwatch.ElapsedMilliseconds; 
   } 
 
 
   private static long FetchSqlNodes() 
   { 
     var stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
 
     for (int i = 0; i  NumberOfNodes; i++) 
     { 
       using (var unitOfWork = new UnitOfWork()) 
       { 
         var repository = new NodeRepository(unitOfWork); 
 
         Node node = repository.GetById(i + 1); 
         IReadOnlyListNode> links = node.Links; 
       } 
     } 
 
     stopwatch.Stop(); 
     return stopwatch.ElapsedMilliseconds; 
   } 
 
 
   private static long LinkSqlNodes() 
   { 
     var stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
 
     using (var unitOfWork = new UnitOfWork()) 
     { 
       var repository = new NodeRepository(unitOfWork); 
 
       IListNode> nodes = repository.GetAll(); 
       foreach (Node node1 in nodes) 
       { 
         foreach (Node node2 in nodes) 
         { 
           node1.AddLink(node2); 
         } 
       } 
       unitOfWork.Commit(); 
     } 
 
     stopwatch.Stop(); 
     return stopwatch.ElapsedMilliseconds; 
   } 
 
 
   private static long LinkMongoNodes() 
   { 
     var stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
 
     using (var unitOfWork = new UnitOfWork()) 
     { 
       var repository = new MongoNodeRepository(unitOfWork); 
 
       IListMongoNode> nodes = repository.GetAll(); 
       foreach (MongoNode node1 in nodes) 
       { 
         foreach (MongoNode node2 in nodes) 
         { 
           node1.AddLink(node2); 
         } 
       } 
       unitOfWork.Commit(); 
     } 
 
     stopwatch.Stop(); 
     return stopwatch.ElapsedMilliseconds; 
   } 
 
 
   private static void CreateNodes() 
   { 
     using (var unitOfWork = new UnitOfWork()) 
     { 
       var repository = new NodeRepository(unitOfWork); 
 
       for (int i = 0; i  NumberOfNodes; i++) 
       { 
         var node = new Node("Node " + (i + 1)); //實例化 構造函數初始化name 
         repository.Save(node); 
       } 
 
       unitOfWork.Commit(); 
     } 
 
     using (var unitOfWork = new UnitOfWork()) 
     { 
       var repository = new MongoNodeRepository(unitOfWork); 
 
       for (int i = 0; i  NumberOfNodes; i++) 
       { 
         var node = new MongoNode("Node " + (i + 1)); 
         repository.Save(node); 
       } 
 
       unitOfWork.Commit(); 
     } 
   } 
 
   //清空數據 
   private static void ClearDatabases() 
   { 
     new MongoClient(MongoConnectionString) 
       .GetDatabase("sqlWithMongo") 
       .DropCollectionAsync("links") 
       .Wait(); 
 
     string query = "DELETE FROM [dbo].[MongoNode];" + 
             "DELETE FROM [dbo].[Node_Node];" + 
             "DELETE FROM [dbo].[Node];" + 
             "UPDATE [dbo].[Ids] SET [NextHigh] = 0"; 
 
     using (var connection = new SqlConnection(SqlServerConnectionString)) 
     { 
       var command = new SqlCommand(query, connection) 
       { 
         CommandType = CommandType.Text 
       }; 
 
       connection.Open(); 
       command.ExecuteNonQuery(); 
     } 
   } 
 } 

相關輔助類代碼如下:

public static class Initer 
 { 
   public static void Init(string sqlServerConnectionString, string mongoConnectionString) 
   { 
     //SqlServer初始化 
     SessionFactory.Init(sqlServerConnectionString); 
     //Mongodb初始化 
     NodeLinkRepository.Init(mongoConnectionString); 
   } 
 } 
public static class SessionFactory //工廠 
  { 
    private static ISessionFactory _factory; 
 
 
    internal static ISession OpenSession() 
    { 
      return _factory.OpenSession(new Interceptor()); 
    } 
 
 
    internal static void Init(string connectionString) 
    { 
      _factory = BuildSessionFactory(connectionString); 
    } 
 
 
    private static ISessionFactory BuildSessionFactory(string connectionString) 
    { 
      //用編程的方式進行配置,讓你能更好的理解,不需要編寫復雜的映射文件,它能完全替換NHibernate的映射文件,讓你在映射的時候能使用C#的強類型方式。 
      FluentConfiguration configuration = Fluently.Configure() 
        .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString)) 
        .Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly())) 
        .ExposeConfiguration(x => 
        { 
          x.EventListeners.PostLoadEventListeners = new IPostLoadEventListener[] 
          { 
            new EventListener() 
          }; 
        }); 
 
      return configuration.BuildSessionFactory(); 
    } 
  } 
internal class NodeLinkRepository //倉庫 Repository模式 
  { 
    private static IMongoCollectionNodeLinks> _collection; 
 
 
    public IListNodeLink> GetLinks(int nodeId) 
    { 
      NodeLinks links = _collection.Find(x => x.Id == nodeId).SingleOrDefaultAsync().Result; 
       
      if (links == null) 
        return new NodeLink[0]; 
 
      return links.Links; 
    } 
 
 
    public Task SaveLinks(int nodeId, IEnumerableNodeLink> links) 
    { 
      var nodeLinks = new NodeLinks(nodeId, links); 
      var updateOptions = new UpdateOptions 
      { 
        IsUpsert = true 
      }; 
 
      return _collection.ReplaceOneAsync(x => x.Id == nodeId, nodeLinks, updateOptions); 
    } 
 
 
    internal static void Init(string connectionString) 
    { 
      var client = new MongoClient(connectionString); 
      IMongoDatabase database = client.GetDatabase("sqlWithMongo"); 
      var collectionSettings = new MongoCollectionSettings 
      { 
        WriteConcern = new WriteConcern(1) 
      }; 
      _collection = database.GetCollectionNodeLinks>("links", collectionSettings); 
    } 
 
 
    private class NodeLinks 
    { 
      public int Id { get; private set; } 
      public ListNodeLink> Links { get; private set; } 
 
 
      public NodeLinks(int nodeId, IEnumerableNodeLink> links) 
      { 
        Id = nodeId; 
        Links = new ListNodeLink>(); 
        Links.AddRange(links); 
      } 
    } 
  } 
public class NodeRepository 
  { 
    private readonly UnitOfWork _unitOfWork; 
 
 
    public NodeRepository(UnitOfWork unitOfWork) 
    { 
      _unitOfWork = unitOfWork; 
    } 
 
 
    public Node GetById(int id) 
    { 
      return _unitOfWork.GetNode>(id); 
    } 
 
 
    public IListNode> GetAll() 
    { 
      return _unitOfWork.QueryNode>() 
        .ToList(); 
    } 
 
 
    public void Save(Node mongoNode) 
    { 
      _unitOfWork.SaveOrUpdate(mongoNode); 
    } 
  } 
public class MongoNodeRepository 
  { 
    private readonly UnitOfWork _unitOfWork; 
 
 
    public MongoNodeRepository(UnitOfWork unitOfWork) 
    { 
      _unitOfWork = unitOfWork; 
    } 
 
 
    public MongoNode GetById(int id) 
    { 
      return _unitOfWork.GetMongoNode>(id); 
    } 
 
 
    public void Save(MongoNode mongoNode) 
    { 
      _unitOfWork.SaveOrUpdate(mongoNode); 
    } 
 
 
    public IListMongoNode> GetAll() 
    { 
      return _unitOfWork.QueryMongoNode>() 
        .ToList(); 
    } 
  } 

模型層數據:
Node.cs,NodeMap.cs類代碼如下:

public class Node 
  { 
    public virtual int Id { get; protected set; } 
    public virtual string Name { get; protected set; } 
 
    protected virtual ISetNode> LinksInternal { get; set; } 
    public virtual IReadOnlyListNode> Links 
    { 
      get { return LinksInternal.ToList(); } 
    } 
 
 
    protected Node() 
    { 
      LinksInternal = new HashSetNode>(); 
    } 
 
 
    public Node(string name) 
      : this() 
    { 
      Name = name; 
    } 
 
 
    public virtual void AddLink(Node node) 
    { 
      LinksInternal.Add(node); 
      node.LinksInternal.Add(this); 
    } 
  } 
public class NodeMap : ClassMapNode> //FluentNHibernate.Mapping.ClasslikeMapBaseT> 
  { 
    public NodeMap() 
    { 
      Id(x => x.Id, "NodeId").GeneratedBy.HiLo("[dbo].[Ids]", "NextHigh", "10", "EntityName = 'Node'"); 
      Map(x => x.Name).Not.Nullable(); 
 
      HasManyToManyNode>(Reveal.MemberNode>("LinksInternal")) 
        .AsSet() 
        .Table("Node_Node") 
        .ParentKeyColumn("NodeId1") 
        .ChildKeyColumn("NodeId2"); 
    } 
  } 

MongoNode.cs和MongoNodeMap.cs的代碼如下:

public class MongoNode 
 { 
   public virtual int Id { get; protected set; } 
   public virtual string Name { get; protected set; } 
 
   protected virtual HashSetNodeLink> LinksInternal { get; set; } 
   public virtual IReadOnlyListNodeLink> Links 
   { 
     get { return LinksInternal.ToList(); } 
   } 
 
 
   protected MongoNode() 
   { 
     LinksInternal = new HashSetNodeLink>(); 
   } 
 
 
   public MongoNode(string name) 
     : this() 
   { 
     Name = name; 
   } 
 
 
   public virtual void AddLink(MongoNode mongoNode) 
   { 
     LinksInternal.Add(new NodeLink(mongoNode.Id, mongoNode.Name)); 
     mongoNode.LinksInternal.Add(new NodeLink(Id, Name)); 
   } 
 } 
public class MongoNodeMap : ClassMapMongoNode> //FluentNHibernate中的類繼承 
  { 
    public MongoNodeMap() 
    { 
      Id(x => x.Id, "MongoNodeId").GeneratedBy.HiLo("[dbo].[Ids]", "NextHigh", "10", "EntityName = 'MongoNode'"); 
      Map(x => x.Name).Not.Nullable(); 
    } 
  } 

Utils層的類:
EventListener.cs內容:

internal class EventListener : IPostLoadEventListener //NHibernate.Event繼承 
  { 
    public void OnPostLoad(PostLoadEvent ev) 
    { 
      var networkNode = ev.Entity as MongoNode; 
 
      if (networkNode == null) 
        return; 
 
      var repository = new NodeLinkRepository(); 
      IListNodeLink> linksFromMongo = repository.GetLinks(networkNode.Id); 
 
      HashSetNodeLink> links = (HashSetNodeLink>)networkNode 
        .GetType() 
        .GetProperty("LinksInternal", BindingFlags.NonPublic | BindingFlags.Instance) 
        .GetValue(networkNode); 
      links.UnionWith(linksFromMongo); 
    } 
  } 
internal class Interceptor : EmptyInterceptor //NHibernate中的類 
 { 
   public override void PostFlush(ICollection entities) 
   { 
     IEnumerableMongoNode> nodes = entities.OfTypeMongoNode>(); 
 
     if (!nodes.Any()) 
       return; 
 
     var repository = new NodeLinkRepository(); 
     Task[] tasks = nodes.Select(x => repository.SaveLinks(x.Id, x.Links)).ToArray(); 
     Task.WaitAll(tasks); 
   } 
 } 

UnitOfWork.cs代碼:

public class UnitOfWork : IDisposable 
 { 
   private readonly ISession _session; 
   private readonly ITransaction _transaction; 
   private bool _isAlive = true; 
   private bool _isCommitted; 
 
   public UnitOfWork() 
   { 
     _session = SessionFactory.OpenSession(); 
     _transaction = _session.BeginTransaction(IsolationLevel.ReadCommitted); 
   } 
 
 
   public void Dispose() 
   { 
     if (!_isAlive) 
       return; 
 
     _isAlive = false; 
 
     try 
     { 
       if (_isCommitted) 
       { 
         _transaction.Commit(); 
       } 
     } 
     finally 
     { 
       _transaction.Dispose(); 
       _session.Dispose(); 
     } 
   } 
    
   public void Commit() 
   { 
     if (!_isAlive) 
       return; 
 
     _isCommitted = true; 
   } 
 
 
   internal T GetT>(int id) 
   { 
     return _session.GetT>(id); 
   } 
 
 
   internal void SaveOrUpdateT>(T entity) 
   { 
     _session.SaveOrUpdate(entity); 
   } 
 
 
   internal IQueryableT> QueryT>() 
   { 
     return _session.QueryT>(); 
   } 
 } 

Database.sql建表語句:

CREATE DATABASE [SqlWithMongo] 
GO 
USE [SqlWithMongo] 
GO 
/****** 表 [dbo].[Ids] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Ids]( 
  [EntityName] [nvarchar](100) NOT NULL, 
  [NextHigh] [int] NOT NULL, 
 CONSTRAINT [PK_Ids] PRIMARY KEY CLUSTERED  
( 
  [EntityName] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
 
GO 
/****** 表 [dbo].[MongoNode] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[MongoNode]( 
  [MongoNodeId] [int] NOT NULL, 
  [Name] [nvarchar](100) NOT NULL, 
 CONSTRAINT [PK_MongoNode] PRIMARY KEY CLUSTERED  
( 
  [MongoNodeId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
 
GO 
/****** 表 [dbo].[Node] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Node]( 
  [NodeId] [int] NOT NULL, 
  [Name] [nvarchar](100) NOT NULL, 
 CONSTRAINT [PK_NetworkNode] PRIMARY KEY CLUSTERED  
( 
  [NodeId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
 
GO 
/****** 表 [dbo].[Node_Node] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Node_Node]( 
  [NodeId1] [int] NOT NULL, 
  [NodeId2] [int] NOT NULL, 
 CONSTRAINT [PK_NetworkNode_NetworkNode] PRIMARY KEY CLUSTERED  
( 
  [NodeId1] ASC, 
  [NodeId2] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
 
GO 
ALTER TABLE [dbo].[Node_Node] WITH CHECK ADD CONSTRAINT [FK_NetworkNode_NetworkNode_NetworkNode] FOREIGN KEY([NodeId1]) 
REFERENCES [dbo].[Node] ([NodeId]) 
GO 
ALTER TABLE [dbo].[Node_Node] CHECK CONSTRAINT [FK_NetworkNode_NetworkNode_NetworkNode] 
GO 
ALTER TABLE [dbo].[Node_Node] WITH CHECK ADD CONSTRAINT [FK_NetworkNode_NetworkNode_NetworkNode1] FOREIGN KEY([NodeId2]) 
REFERENCES [dbo].[Node] ([NodeId]) 
GO 
ALTER TABLE [dbo].[Node_Node] CHECK CONSTRAINT [FK_NetworkNode_NetworkNode_NetworkNode1] 
GO 
 
INSERT dbo.Ids (EntityName, NextHigh) 
VALUES ('MongoNode', 0) 
INSERT dbo.Ids (EntityName, NextHigh) 
VALUES ('Node', 0) 

結果如圖:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Python實現讀取SQLServer數據并插入到MongoDB數據庫的方法示例
  • 使用mongovue把sqlserver數據導入mongodb的步驟
  • 遷移sqlserver數據到MongoDb的方法

標簽:邯鄲 吉安 大理 景德鎮 本溪 丹東 鶴崗 昭通

巨人網絡通訊聲明:本文標題《SqlServer與MongoDB結合使用NHibernate》,本文關鍵詞  SqlServer,與,MongoDB,結合,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SqlServer與MongoDB結合使用NHibernate》相關的同類信息!
  • 本頁收集關于SqlServer與MongoDB結合使用NHibernate的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    毛片av一区二区三区| 国产成人一区二区精品非洲| 日韩黄色一级片| 欧美三级午夜理伦三级中视频| 国产欧美一区二区精品仙草咪| 日产国产高清一区二区三区| 欧美理论电影在线| 全国精品久久少妇| 欧美xxxx在线观看| 国产成a人亚洲精品| 国产精品福利av| 欧美伊人久久久久久久久影院| 亚洲一区二区不卡免费| 日本高清不卡aⅴ免费网站| 有坂深雪av一区二区精品| 欧美最猛黑人xxxxx猛交| 亚洲精品国产高清久久伦理二区| 色天使久久综合网天天| 天堂成人国产精品一区| 精品乱码亚洲一区二区不卡| 国产成人av影院| 亚洲综合丁香婷婷六月香| 日韩一区二区三区在线| 丁香啪啪综合成人亚洲小说 | 中文字幕精品在线不卡| 日本精品裸体写真集在线观看| 亚洲韩国一区二区三区| 26uuu另类欧美亚洲曰本| 99综合电影在线视频| 日本sm残虐另类| 中文字幕亚洲视频| 欧美zozo另类异族| 欧美一a一片一级一片| 黑人巨大精品欧美一区| 亚洲美女免费视频| 久久久99免费| 在线成人av网站| 不卡免费追剧大全电视剧网站| 日韩精品亚洲专区| 综合色天天鬼久久鬼色| 精品国产不卡一区二区三区| 白白色 亚洲乱淫| 国产麻豆9l精品三级站| 日韩高清欧美激情| 一区二区三区四区亚洲| 国产日产欧美一区| 欧美疯狂做受xxxx富婆| 成av人片一区二区| 韩国欧美一区二区| 日本三级亚洲精品| 亚洲午夜在线电影| 亚洲人123区| 国产精品美女视频| 日本一区二区成人| 亚洲精品一区二区三区香蕉| 制服.丝袜.亚洲.中文.综合| 99re这里只有精品6| 成人网在线免费视频| 狠狠狠色丁香婷婷综合久久五月| 亚洲一区免费视频| 亚洲福利一区二区| 性久久久久久久| 亚洲午夜久久久久久久久电影网| 最近中文字幕一区二区三区| 国产亚洲一区二区三区四区| 久久先锋影音av鲁色资源网| 久久一留热品黄| 久久精品免视看| 国产精品嫩草99a| 亚洲图片另类小说| 亚洲精品中文字幕在线观看| 樱桃视频在线观看一区| 一级做a爱片久久| 五月婷婷久久丁香| 老司机精品视频线观看86| 久久se精品一区精品二区| 精品一区二区av| 国产ts人妖一区二区| 岛国一区二区在线观看| 99这里只有久久精品视频| 在线看日本不卡| 在线综合视频播放| 久久亚洲一区二区三区四区| 国产偷国产偷精品高清尤物| 国产精品婷婷午夜在线观看| 国产精品久久一级| 亚洲第一狼人社区| 精品一区中文字幕| 91视频免费看| 精品日产卡一卡二卡麻豆| 国产片一区二区| 亚洲成在人线免费| 国产精品一区二区黑丝| av一区二区久久| 3atv一区二区三区| 国产网站一区二区| 一区二区三区国产豹纹内裤在线| 日本在线不卡视频| 99久久综合国产精品| 欧美精品少妇一区二区三区| 国产视频一区在线播放| 亚洲一区二区三区中文字幕在线 | 福利电影一区二区| 欧美日韩激情在线| 亚洲国产成人自拍| 美女一区二区视频| 97成人超碰视| 精品美女一区二区三区| 亚洲精品国久久99热| 狠狠色狠狠色综合| 欧美日韩国产免费一区二区 | 亚洲精品日韩专区silk| 老司机免费视频一区二区| 色综合色综合色综合色综合色综合| 日韩亚洲欧美一区二区三区| 中文字幕在线不卡一区二区三区 | 国产精品一区二区久久不卡| 欧美日韩电影在线播放| ●精品国产综合乱码久久久久| 美女任你摸久久| 欧美日韩一区小说| 18欧美亚洲精品| 国产不卡高清在线观看视频| 日韩欧美国产一区二区在线播放 | 欧美影院精品一区| 国产精品福利影院| 成人动漫一区二区在线| 国产女人18水真多18精品一级做| 日本成人在线不卡视频| 欧美日韩mp4| 午夜视频一区在线观看| 在线精品视频免费播放| √…a在线天堂一区| 国产99久久久久久免费看农村| 91精品国产色综合久久不卡电影| 亚洲综合一区在线| 色综合天天视频在线观看| 亚洲免费电影在线| 色哦色哦哦色天天综合| 亚洲色图欧洲色图婷婷| 91蜜桃视频在线| 亚洲免费成人av| 欧美日韩中文字幕一区二区| 亚洲伊人色欲综合网| 欧美日韩国产首页| 国产精品网曝门| 亚洲欧洲精品一区二区精品久久久| 久久久国产综合精品女国产盗摄| 性感美女极品91精品| 亚洲视频一区二区在线| 国产精品2024| 国产欧美日韩麻豆91| 国产一区二区三区电影在线观看 | 欧美日韩国产美女| 亚洲综合偷拍欧美一区色| 91麻豆国产精品久久| 亚洲免费在线播放| 欧美日韩一区小说| 三级久久三级久久| 精品国产乱码久久久久久久| 极品美女销魂一区二区三区免费| 26uuu欧美| 91啪亚洲精品| 天堂蜜桃91精品| 久久精品水蜜桃av综合天堂| 91热门视频在线观看| 日韩高清不卡在线| 国产精品丝袜在线| 欧美日韩视频在线观看一区二区三区| 日韩精品五月天| 国产亚洲一区二区三区在线观看| 成人激情综合网站| 亚洲国产三级在线| 久久精品欧美日韩| 欧美色涩在线第一页| 国产乱码精品一区二区三区五月婷| 欧美国产日韩在线观看| 69堂精品视频| 成人免费视频一区二区| 天天影视色香欲综合网老头| 国产日产欧美一区二区视频| 在线看一区二区| 国产精品亚洲一区二区三区妖精 | 欧美精品丝袜中出| 国产一区二区三区黄视频| 日韩一区日韩二区| 久久久亚洲高清| 欧美性生活影院| 91美女片黄在线观看| 精品一区二区三区在线观看| 亚洲码国产岛国毛片在线| 日韩免费在线观看| 欧美午夜精品电影| 99久久er热在这里只有精品15| 久久福利视频一区二区| 亚洲国产精品天堂| 亚洲综合激情小说| 亚洲色图欧美激情| 国产精品免费av| 国产精品午夜免费|