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

詳解ORM組件XCode教程 圖文并茂

移動開發 iOS
XCode開發模式建議先有數據庫再有實體模型,然后借助代碼生成器生成實體代碼;當然你要反過來先做實體模型也是可以的,XCode之下的實體,支持反向生成數據庫結構。

ORM組件XCode教程是本文要介紹的內容,本篇才真正是XCode教程***篇。《速覽》是為了以最簡潔的語言最短小的篇幅去吸引開發者;《簡介》則是對XCode組件和XCode開發模式的一個整體介紹,讓開發者從宏觀的角度去理解XCode;《共舞》把XCode提到了一個新的高度,讓開發者感受到它的貴族血統!

先拋出三篇來吸引人,再出《動手》,其實就是吊人胃口。如果到這里你還沒有想試一試XCode的念頭沖動,好吧,我承認是我的失敗,不過你可以欺騙我,可別欺騙你自己!

XCode開發模式建議先有數據庫再有實體模型,然后借助代碼生成器生成實體代碼;當然你要反過來先做實體模型也是可以的,XCode之下的實體,支持反向生成數據庫結構。

下面以《速覽》中的UserMember為例,建立數據表:

數據表名: 用戶 (UserMember)

詳解ORM組件XCode教程 

詳解ORM組件XCode教程

數據庫命名規范:

(1)名稱必須使用通俗易懂的英文單詞全拼,常用的縮略詞(如ID)除外

(2)使用駝峰命名規則,每個單詞首字母大寫,其它小寫

(3)名稱必須簡潔明了,不要加多余的前綴(如表名前加tbl),字段名也不要加表名前綴

(4)不得使用SQL關鍵字或C#關鍵字作為表名或字段名

(5)布爾型字段名稱必須是IsAbb的形式

(6)字符串類型統一使用nvarchar,大文本使用ntext,除非特殊情況,否則不用其它文本類型

(7)建議給每張表建立一個自增的ID字段并作為主鍵,以利于數據分頁管理

(8)建議給每張表和每個字段加上說明

(9)使用代碼生成器生成代碼(先看代碼,待會講過程):

代碼

  1. /// <summary> 
  2. /// 用戶  
  3. /// </summary> 
  4. [Serializable]  
  5. [DataObject]  
  6. [Description("用戶")]  
  7. [BindTable("UserMember", Description = "用戶"ConnName = "Test")]  
  8. public partial class UserMember  
  9. {  
  10.     #region 屬性  
  11.     private Int32 _ID;  
  12.     /// <summary> 
  13.     /// 編號  
  14.     /// </summary> 
  15.     [Description("編號")]  
  16.     [DataObjectField(true, true, false, 10)]  
  17.     [BindColumn("ID", Description = "編號"DefaultValue = ""Order = 1)]  
  18.     public Int32 ID  
  19.     {  
  20.         get { return _ID; }  
  21.         set { if (OnPropertyChange("ID", value)) _ID = value; }  
  22.     }  
  23.       
  24.     private String _Account;  
  25.     /// <summary> 
  26.     /// 賬號  
  27.     /// </summary> 
  28.     [Description("賬號")]  
  29.     [DataObjectField(false, false, true, 50)]  
  30.     [BindColumn("Account", Description = "賬號"DefaultValue = ""Order = 2)]  
  31.     public String Account  
  32.     {  
  33.         get { return _Account; }  
  34.         set { if (OnPropertyChange("Account", value)) _Account = value; }  
  35.     }  
  36.       
  37.     private String _DisplayName;  
  38.     /// <summary> 
  39.     /// 顯示名  
  40.     /// </summary> 
  41.     [Description("顯示名")]  
  42.     [DataObjectField(false, false, true, 50)]  
  43.     [BindColumn("DisplayName", Description = "顯示名"DefaultValue = ""Order = 3)]  
  44.     public String DisplayName  
  45.     {  
  46.         get { return _DisplayName; }  
  47.         set { if (OnPropertyChange("DisplayName", value)) _DisplayName = value; }  
  48.     }  
  49.     #endregion  
  50.  
  51.     #region 獲取/設置 字段值  
  52.     /// <summary> 
  53.     /// 獲取/設置 字段值。  
  54.     /// 一個索引,基類使用反射實現。  
  55.     /// 派生實體類可重寫該索引,以避免反射帶來的性能損耗  
  56.     /// </summary> 
  57.     /// <param name="name">字段名</param> 
  58.     /// <returns></returns> 
  59.     public override Object this[String name]  
  60.     {  
  61.         get  
  62.         {  
  63.             switch (name)  
  64.             {  
  65.                 case "ID": return ID;  
  66.                 case "Account": return Account;  
  67.                 case "DisplayName": return DisplayName;  
  68.                 default: return base[name];  
  69.             }  
  70.         }  
  71.         set  
  72.         {  
  73.             switch (name)  
  74.             {  
  75.                 case "ID": _ID = Convert.ToInt32(value); break;  
  76.                 case "Account": _Account = Convert.ToString(value); break;  
  77.                 case "DisplayName": _DisplayName = Convert.ToString(value); break;  
  78.                 default: base[name] = value; break;  
  79.             }  
  80.         }  
  81.     }  
  82.     #endregion  
  83.     #region 字段名  
  84.     /// <summary> 
  85.     /// 取得字段名的快捷方式  
  86.     /// </summary> 
  87.     public class _  
  88.     {  
  89.         /// <summary> 
  90.         /// 編號  
  91.         /// </summary> 
  92.         public const String ID = "ID";  
  93.         /// <summary> 
  94.         /// 賬號  
  95.         /// </summary> 
  96.         public const String Account = "Account";  
  97.           
  98.         /// <summary> 
  99.         /// 顯示名  
  100.         /// </summary> 
  101.         public const String DisplayName = "DisplayName";  
  102.     }  
  103.     #endregion  

代碼不多,分為屬性、索引器和嵌套類三大塊,其中后兩塊還不是必須的,所以即使是手工編碼也不會太麻煩。

所使用的代碼生成器XCoder,是一個基于XCode的模版標簽替換生成器。XCode提供數據庫結構信息,用戶設計模版,XCoder根據模版標簽進行替換。上面的代碼還有數據字典表格,都是XCoder生成的,只是所使用的模版不同而已。有興趣的朋友完全可以定制自己的代碼生成器,DAL類的Tables屬性可以取得該連接的表架構信息,如DAL.Create("Test").Tables可以取得連接名為Test的數據庫的架構信息。

#p#

XCoder的使用很簡單,打開配置文件XCoder.exe.config,增加一個連接字符串

代碼

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <configuration> 
  3.   <connectionStrings> 
  4.     <add name="Test" connectionString="Data Source=.;Initial Catalog=Test;Integrated Security=True;" providerName="System.Data.SqlClient"/> 
  5.   </connectionStrings> 
  6. </configuration> 

運行XCoder.exe,可以在連接下拉框選擇連接字符串

詳解ORM組件XCode教程

點擊連接,列出該庫所有表和視圖

ORM組件XCode教程

設置命名空間、輸出目錄和連接名等信息,選擇“數據”模版,點擊生成

ORM組件XCode教程

因為XCode是充血模型,使用的時候是不需要指定數據庫連接的,所以實體類里面默認指定連接名。

#p#

XCode模型追求簡單實用,所以沒有區分數據層和業務層。但是XCode實體類有數據類和業務類的說法,剛才上面的“數據”模版生成的就是數據類,下面生成業務類

ORM組件XCode教程

可以看出,數據類和業務類其實就是同一類,只不過使用了分部類partial,把一個類分拆到兩個文件里面去。數據類記錄表結構信息,基本上依靠于生成;業務類***次生成后只有一些注釋,用于引導開發者如何實現自己想要的功能。業務代碼等人工編寫的代碼,都要求卸載業務類里面,當表結構改變需要重新生成代碼時,僅生成數據類即可,人工編寫的代碼保留在業務類中,不至于被覆蓋。

 

XCoder在輸出目錄生成了代碼文件,復制到vs里面去

ORM組件XCode教程  ORM組件XCode教程

再看看例子代碼

代碼

  1. //新增數據,Save等效于Insert  
  2. UserMember user = new UserMember();  
  3. user.Account = "asdf";  
  4. user.Save();  
  5. //user.Insert();  
  6. //ID作為自增字段,保存后自動設為新值  
  7. Console.WriteLine(user.ID);  
  8. //查找數據,等效  
  9. user = UserMember.Find("Account", "asdf");  
  10. user = UserMember.Find(UserMember._.Account, "asdf");  
  11. user = UserMember.FindByAccount("asdf");  
  12. user.DisplayName = "測試數據";  
  13. //讀取成員數據,等效  
  14. String str = (String)user["DisplayName"];  
  15. str = user.DisplayName;  
  16. //給成員賦值,等效  
  17. user.DisplayName = "測試數據";  
  18. user["DisplayName"] = "測試數據";  
  19. //保存數據,等效  
  20. user.Save();  
  21. //user.Update();  
  22. Console.WriteLine(user.ID);  
  23. user.Delete(); 

編譯,提示user = UserMember.FindByAccount("asdf")這句報錯,沒有FindByAccout方法。忘了這是我手工寫的了

  1. public static UserMember FindByAccount(String account)  
  2. {  
  3.     return Find(_.Account, account);  

這個方法是根據賬號查找用戶。一般建議,FindByXxxx表示根據某個條件查詢一個對象,FindAllByXxxx表示查詢符合某個條件的所有對象的集合。

再次編譯,通過。運行

ORM組件XCode教程

又忘了,我們還沒有設置連接字符串呢。增加連接字符串

  1. <add name="Test" connectionString="Data Source=.;Initial Catalog=Test;Integrated Security=True;" providerName="System.Data.SqlClient" /> 

這里要求連接名必須是Test,因為生成數據類的時候,指定了連接名為Test,所以才有剛才的異常,提示設置Test連接字符串。后面就是標準的連接字符串了,當然,這個時候是可以修改為Access、Oracle、MySql等連接字符串的,盡管我們開始的時候是在SqlServer中建立表結構。因為實體類已經建立完成,它與具體數據庫無關,只有在運行時探測是哪一種數據庫,再根據情況生成相應的查詢/操作SQL。

XCode除了能獲取數據庫架構信息外,還能設置數據庫架構,也就是能夠根據實體類自動進行建表或者修改表結構。所以,不用擔心修改連接字符串指向別的數據庫后,會因為沒有數據表而報錯。這個小功能有個好處,比如生產環境是Oracle數據庫,而開發環境比較差,跑不起Oracle,完全可以在開發環境用Access進行設計,部署到生成環境再修改連接字符串,XCode會盡其所能的屏蔽數據庫操作差異。

打開XCode的OrmDebug開關(用于輸出SQL語句),再次運行

ORM組件XCode教程

跟上面的代碼進行比對,可以加深理解。OrmDebug開關對于學習XCode和解決問題非常有用。

上面是控制臺的例子,下面看看Web的例子。

 #p#

在生成實體類代碼的時候,可以看到還有兩個模版“列表頁”和“表單”,取消“中文文件名”選擇,分別生成這兩個模版的代碼。新建一個網站,把它們復制進去

ORM組件XCode教程  ORM組件XCode教程

設置連接字符串,預覽UserMember.aspx

ORM組件XCode教程

回到剛才的控制臺代碼,我們另外寫一段插入測試數據的代碼

  1. for (int i = 0; i < 176; i++)  
  2. {  
  3.     UserMember user = new UserMember();  
  4.     user.Account = "User" + i;  
  5.     user.DisplayName = "用戶" + i;  
  6.     user.Insert();  

這段代碼將會向數據庫插入176行數據。刷新UserMember.aspx頁面

ORM組件XCode教程  

ORM組件XCode教程  

ORM組件XCode教程  

ORM組件XCode教程  

ORM組件XCode教程

列表顯示、分頁、排序、編輯、刪除等功能都有了。

我們對這個頁面做一點修改,添加一個到UserMemberForm.aspx的鏈接,并且把GridView里面的賬號列改為超鏈接,也鏈接到UserMemberForm.aspx,并且帶上ID作為參數。 ORM組件XCode教程

ORM組件XCode教程

點擊“添加用戶”

ORM組件XCode教程  ORM組件XCode教程

添加一個用戶

ORM組件XCode教程

點擊賬號aaa,進入表單編輯頁面,注意地址欄的ID=179

ORM組件XCode教程

又一次,我們沒有編寫代碼!

其實這些都是一些非常簡單的功能,列表頁就是GridView+ObjectDataSource +實體類,表單頁就是FormView+ObjectDataSource+實體類,沒有傳遞ID的時候為添加狀態。

Web的例子就到這里,詳細的用法可以回過頭看看《與ObjectDataSource共舞》,里面提到的批量生產正是本篇所使用的代碼生成器生成列表頁和表單頁。

責任編輯:zhaolei 來源: 博客園
相關推薦

2011-08-09 16:47:24

Xcode 4發布程序

2011-11-21 15:12:54

Java斷點Eclipse

2011-01-18 18:29:28

Thunderbird

2011-07-20 12:49:49

XCode SnapShots SCM

2011-07-18 13:11:53

2012-07-27 10:27:19

OfficeWord

2011-07-04 16:57:36

QT 布局 界面

2009-07-15 14:49:16

2011-01-18 18:08:28

Thunderbird

2011-01-19 17:34:39

Postfix如何接收郵件

2023-05-16 08:01:13

架構網站演進

2011-01-19 17:30:21

Postfix郵件投遞

2012-07-23 14:39:27

移動

2011-01-20 09:13:18

Postfix

2021-12-27 08:04:49

架構網站高并發

2015-07-08 10:25:05

Javascript上下文作用域

2022-07-18 14:33:05

PythonPDF報告

2011-01-19 10:30:20

UbuntuThunderbird

2011-01-21 10:28:06

2022-04-20 18:30:00

算法架構粗排
點贊
收藏

51CTO技術棧公眾號

国产日韩欧美一二三区| 亚洲性夜色噜噜噜7777| 成人在线观看你懂的| 日本大臀精品| 裸体一区二区三区| 欧美国产日韩一区二区三区| 中文字幕免费高清视频| 中文字幕系列一区| 久久亚洲人体| 国产精品97| 欧美精品一区在线观看| 无码aⅴ精品一区二区三区浪潮| 国产高清av在线| 国产.欧美.日韩| 国产精品视频yy9099| 国产无套内射又大又猛又粗又爽| 国际精品欧美精品| 欧美tk丨vk视频| 9久久婷婷国产综合精品性色| 欧美理论电影| 国产精品美女久久久久aⅴ国产馆| 97夜夜澡人人双人人人喊| 中文字幕精品无码一区二区| 女人香蕉久久**毛片精品| 亚洲欧美日韩爽爽影院| 性高潮久久久久久| 欧美aaa级| 色悠久久久久综合欧美99| 免费看黄色a级片| 成人不用播放器| 99re8在线精品视频免费播放| 91精品视频网站| 天天操天天干天天摸| 日韩午夜电影| 欧美大片欧美激情性色a∨久久| 色噜噜噜噜噜噜| 亚洲免费成人av在线| 精品国产免费人成电影在线观看四季 | 熟女人妇 成熟妇女系列视频| 亚洲第一图区| 亚洲天堂a在线| 亚洲ai欧洲av| 久草福利在线| 久久综合九色综合97婷婷女人| 97se在线视频| www.黄色av| 国产一区二区三区四区在线观看| 国产精品入口免费视频一| 日韩黄色在线播放| 亚洲女同在线| 欧美一区在线直播| 国内精品福利视频| 性娇小13――14欧美| 97精品国产97久久久久久春色| 欧美精品99久久久| 国产在线欧美| 欧美激情xxxx| 久久综合色综合| 亚洲网址在线| 91国在线精品国内播放| 日产精品久久久久| 宅男噜噜噜66一区二区| 欧美一二三视频| 三级视频在线观看| 久久久久国产精品一区二区| 国产精品黄视频| 国产精品sm调教免费专区| 国产精品第157页| 福利在线导航136| 大伊人狠狠躁夜夜躁av一区| 欧美a在线视频| 日本免费久久| 欧美日韩一二三| 少妇高潮一69aⅹ| eeuss国产一区二区三区四区| 欧美mv和日韩mv国产网站| 精品无码人妻少妇久久久久久| 99re6热只有精品免费观看| 亚洲国产精品久久久| av网站免费在线播放| 国产精品入口久久| 最新国产成人av网站网址麻豆| 亚洲综合视频网站| 影音先锋一区| 国产精品久久久久久久久久东京| 亚洲在线观看av| 国产一区二区三区在线观看免费视频 | 国产精品suv一区| 蜜桃视频免费观看一区| 91九色在线观看| 婷婷综合激情网| 中文无字幕一区二区三区| 400部精品国偷自产在线观看| 懂色av一区| 欧美天堂亚洲电影院在线播放| 一级黄色在线播放| 日韩深夜福利| 久久国产视频网站| 五月婷婷亚洲综合| 狠狠色狠狠色综合| 久久本道综合色狠狠五月| 91在线直播| 精品福利在线视频| 岛国毛片在线播放| 日韩精品导航| 欧美成人网在线| 亚洲大尺度在线观看| 国产一区二区0| 日本午夜精品一区二区| 在线免费观看的av| 91久久精品国产91性色tv| 亚洲一级片免费观看| 亚欧日韩另类中文欧美| 久久综合伊人77777| 欧美一二三区视频| 国产乱国产乱300精品| 欧美自拍资源在线| 福利网站在线观看| 欧美一区二区视频观看视频| 五级黄高潮片90分钟视频| 欧美成人69| 国产精品美女免费看| 天天操天天干天天爽| 综合色天天鬼久久鬼色| 福利在线一区二区三区| 特黄特色欧美大片| 欧美激情精品久久久| 一二区在线观看| 久久久久国产免费免费 | 午夜精品久久久久99蜜桃最新版| 亚洲精品字幕| 国产传媒欧美日韩| 日韩一区国产在线观看| 欧美人与性囗牲恔配| 亚洲视频一区| 7777精品伊久久久大香线蕉语言 | 91在线一区二区三区| 久久视频免费在线| 青青草国产一区二区三区| 伊人男人综合视频网| 亚洲欧美综合自拍| 99视频热这里只有精品免费| 日韩久久久久久久久久久久| 久久的色偷偷| 久久午夜a级毛片| 91精品国产乱码久久久久| 国产三级精品视频| 亚洲精品中文字幕无码蜜桃| 小说区图片区色综合区| 欧美孕妇与黑人孕交| 污污视频在线观看网站| 婷婷开心激情综合| 西西大胆午夜视频| 午夜亚洲性色视频| 欧美成人综合一区| 色婷婷综合久久久中字幕精品久久 | 91精品国产乱码久久久久久蜜臀| 亚洲精品国产片| 亚洲国产精品久久久久婷婷884| 伊人久久久久久久久| 欧美精品一线| 国产精品一区二区你懂得| 91视频欧美| 日韩av资源在线播放| 日韩男人的天堂| 久久综合久久综合亚洲| 成人免费无码av| 日韩在线中文| 91免费综合在线| 七七成人影院| 日韩黄色高清视频| 91青青草视频| 最新高清无码专区| 少妇搡bbbb搡bbb搡打电话| 亚洲精品一级| 欧美一区二区综合| 欧美天堂一区| 九九精品视频在线| 熟妇人妻av无码一区二区三区| 欧美日韩国产精品一区二区三区四区 | 精品在线视频免费观看| 91首页免费视频| 嫩草影院国产精品| 欧美精品导航| 奇米888一区二区三区| 欧美黄色网络| 国内精品久久久久影院优| 国内在线精品| 欧美一区二区三区四区五区| 日韩成人av毛片| 国产目拍亚洲精品99久久精品| 亚洲第一天堂久久| 国产欧美丝祙| 中文字幕一区二区三区有限公司 | 成人自拍视频在线| 国产成人精品无码播放| 亚洲一级毛片| 欧美日韩电影一区二区| 国产精品白丝久久av网站| 久久久久久网站| 草碰在线视频| 亚洲福利视频二区| 国产一区二区三区黄片| 午夜av区久久| 国产免费久久久久| 国产午夜精品一区二区| 日韩欧美中文在线视频| 久久蜜桃精品| 国产一区二区四区| 日韩国产专区| 裸体丰满少妇做受久久99精品| 国产精品一区二区美女视频免费看| 8x拔播拔播x8国产精品| 在线视频观看国产| 中文字幕欧美日韩va免费视频| 免费国产羞羞网站视频| 欧美日韩激情一区二区三区| 日韩在线观看第一页| 亚洲精品国产精华液| 国产午夜精品福利视频| 99久久亚洲一区二区三区青草| 欧美激情第一区| 日韩激情中文字幕| 精品欧美一区免费观看α√| 亚洲午夜精品一区 二区 三区| 视频在线99re| 国产欧美一区| 国产精品国产一区二区| 国产精品3区| 成人福利视频网| jizzyou欧美16| 日本sm极度另类视频| h片在线观看下载| 色综合久久88色综合天天看泰| 久久久久久国产精品免费无遮挡| 一区二区三区回区在观看免费视频| 少妇激情av一区二区| 亚洲第一黄色网| 丰满人妻一区二区| 精品少妇一区二区三区在线播放| 国产女同91疯狂高潮互磨| 欧美日韩精品是欧美日韩精品| 波多野结衣一二区| 在线观看一区日韩| 亚洲大片免费观看| 91官网在线观看| 国产黄色免费视频| 欧美中文字幕亚洲一区二区va在线| 五月婷婷色丁香| 色综合久久久久综合体| 台湾佬中文在线| 色一区在线观看| 波多野结衣电车| 欧美日韩一区三区四区| 在线播放国产一区| 欧美日本视频在线| 国产熟女一区二区三区五月婷 | 亚洲成人tv| 中国女人做爰视频| 国产精品magnet| 日本福利视频在线| 久久久精品性| the porn av| 国产一区二区视频在线播放| 麻豆免费在线观看视频| 国产不卡视频在线观看| 男人网站在线观看| 久久女同精品一区二区| 欧美丰满美乳xxⅹ高潮www| 国产精品久久看| 青青草免费av| 欧美午夜精品久久久久久浪潮| 日韩欧美在线观看免费| 欧美日韩三级在线| 99在线精品视频免费观看20| 亚洲第一黄色网| 国产福利电影在线| 久久夜色精品亚洲噜噜国产mv| 日本h片在线观看| 57pao成人永久免费视频| 日本精品网站| 99在线观看视频| 欧美美乳视频| 强开小嫩苞一区二区三区网站| 在线不卡欧美| 黑森林精品导航| 丁香婷婷综合色啪| 国内精品卡一卡二卡三| 日韩美女视频19| 天天操夜夜操视频| 欧美一区二区三区思思人| 视频一区二区在线播放| 中文字幕精品www乱入免费视频| 亚洲精品白浆| 国产激情久久久| 99久热这里只有精品视频免费观看| 蜜桃狠狠色伊人亚洲综合网站| 91亚洲自偷观看高清| 欧美 日本 亚洲| 国产一区二区三区蝌蚪| 精品人妻互换一区二区三区| 亚洲欧美一区二区三区孕妇| 亚洲精品午夜国产va久久成人| 在线播放欧美女士性生活| 日韩大胆视频| 欧美老女人在线视频| 91欧美精品| 精品欧美一区二区三区久久久 | 免费看国产曰批40分钟| 另类的小说在线视频另类成人小视频在线 | 国产盗摄一区二区三区| 国产毛片欧美毛片久久久| 午夜av一区二区| 精品国产无码AV| 日韩在线观看免费全| 第84页国产精品| 国产另类自拍| 一区二区三区中文| 一区二区三区视频网| 99re热视频这里只精品| 久久精品一区二区三| 7777精品伊人久久久大香线蕉超级流畅| 亚洲 另类 春色 国产| 欧美激情视频一区| 国产精品视频一区视频二区 | av网站在线免费观看| 欧美一级黄色网| 久9re热视频这里只有精品| 路边理发店露脸熟妇泻火| 久久精品国产精品青草| 亚洲一区视频在线播放| 色综合久久久久| 久久视频www| 欧美资源在线观看| 日韩av网站在线免费观看| 成人免费毛片在线观看| 国产iv一区二区三区| 三级影片在线看| 在线综合视频播放| 精品视频在线一区二区| 国产综合久久久久| 99久久99热这里只有精品| 亚洲色图 在线视频| 国产午夜亚洲精品午夜鲁丝片 | 欧美日韩亚洲一区二区三区四区| 亚洲精品免费观看| 欧类av怡春院| 精品毛片网大全| 人成在线免费视频| 国产97在线播放| 欧美综合在线视频观看| 大香煮伊手机一区| 国产免费观看久久| 一级视频在线播放| 国产精品自在欧美一区| 国产chinese精品一区二区| 重囗味另类老妇506070| 中文字幕在线观看91| 精品成人国产在线观看男人呻吟| 婷婷五月综合久久中文字幕| 欧美亚洲国产另类| 精品国产91乱码一区二区三区四区 | 欧美美女视频在线观看| av在线免费网站| 国产精品一区二区av| 米奇777在线欧美播放| 成人小视频免费看| 欧美一级二级三级蜜桃| 成人免费高清观看| 久久涩涩网站| 麻豆高清免费国产一区| 久久中文免费视频| 亚洲黄色免费三级| 女生影院久久| a级黄色片网站| eeuss影院一区二区三区| 国产又粗又猛又黄视频| 久久色精品视频| 九九热hot精品视频在线播放| 欧美日韩在线免费播放| 国产精品久久久久一区| 肥臀熟女一区二区三区| 日本欧美精品在线| 国产精品久久久久久久| 日批在线观看视频| 欧美日韩综合不卡| 男女在线观看视频| 日韩黄色影视| 国产成人在线网站| 亚洲不卡在线视频| 欧美国产精品va在线观看| 加勒比久久综合| wwwww在线观看| 欧美性一区二区| 国产精品蜜芽在线观看| 亚洲高清在线观看一区| 成人h精品动漫一区二区三区| av手机天堂网| 欧美激情亚洲一区| 日韩av二区|