精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

偷拍视屏一区| 福利小视频在线| 麻豆精品新av中文字幕| www.日韩欧美| 97中文字幕在线观看| 888av在线视频| 国产日产精品1区| 成人精品久久av网站| 久久久精品99| 国产在线日韩精品| 日韩一区二区三区三四区视频在线观看| 久久这里只有精品8| 欧美色18zzzzxxxxx| 久久精品国产成人一区二区三区| 欧美富婆性猛交| 中文字幕丰满乱子伦无码专区| 国产精品美女午夜爽爽| 亚洲综合无码一区二区| 蜜桃麻豆91| 国产av精国产传媒| 久久久噜噜噜久久狠狠50岁| 久久人体大胆视频| v天堂中文在线| 爱情电影网av一区二区| 欧美日韩一区二区三区| 一本久道久久综合| 日本一卡二卡四卡精品| 国产精品一级片| 国产激情999| 国产精品第72页| 色135综合网| 亚洲精品永久免费精品| 国产乱国产乱老熟300部视频| 欧洲av一区二区| 亚洲r级在线视频| 正在播放亚洲| 成人影院免费观看| www.亚洲色图.com| 91香蕉亚洲精品| 中文字幕免费视频观看| 日韩视频二区| 欧美日韩第一视频| 91高清免费看| 久久影院一区| 亚洲系列中文字幕| av无码一区二区三区| 免费一级欧美片在线观看网站| 欧美亚洲综合色| 久久久999视频| 黄色在线看片| 亚洲综合色网站| 免费看黄色a级片| 青青青青在线| 中文字幕不卡一区| 日本视频一区二区不卡| 青青草在线播放| 91浏览器在线视频| 精品在线观看一区二区| 日韩在线视频第一页| 国产成人99久久亚洲综合精品| 91视频国产高清| 国产精品九九九九| 看国产成人h片视频| 国产精品丝袜一区二区三区| 波多野结衣在线观看视频| 久久久久久夜| 国产精品视频在线播放| 中文字幕久久久久| 美女脱光内衣内裤视频久久网站| 国产精品美女www| 最近中文字幕免费观看| 蜜臀av一区二区三区| 国产精品视频播放| 国产又粗又猛又爽又黄的| 久久电影网站中文字幕| 91九色单男在线观看| 国产男男gay体育生白袜| 国内精品伊人久久久久av影院| 91深夜福利视频| 欧美 日韩 国产 精品| 97久久超碰精品国产| 欧美久久久久久| yiren22亚洲综合伊人22| 国产精品免费久久久久| 精品国产三级a∨在线| 欧美家庭影院| 欧美日韩国产精品| 狠狠热免费视频| 精品国产麻豆| 亚洲精品二三区| 精品亚洲aⅴ无码一区二区三区| 日韩激情图片| 欧美大片在线影院| 毛片基地在线观看| 裸体一区二区三区| 国产富婆一区二区三区| 九色在线播放| 亚洲精品一卡二卡| 国产精品秘入口18禁麻豆免会员| yiren22亚洲综合| 日韩亚洲欧美在线观看| a视频免费观看| 国产精品久久天天影视| 97色在线视频| 91影院在线播放| 97久久人人超碰| 在线视频一区观看| 97蜜桃久久| 在线播放中文一区| 色综合久久久无码中文字幕波多| 深爱激情综合| 欧美激情奇米色| 性高潮视频在线观看| 岛国av在线一区| 亚洲综合网中心| 九九色在线视频| 欧美偷拍一区二区| 亚洲国产精品无码久久久久高潮| 91精品久久久久久久久久不卡| 日本成人在线视频网址| www.五月婷婷| 国产精品乱码妇女bbbb| 免费在线观看的av网站| 亚洲开心激情| 色悠悠国产精品| 91在线视频在线观看| 国产超碰在线一区| 欧美爱爱视频网站| 欧洲精品一区二区三区| 亚洲激情视频网站| 男女免费视频网站| 精品制服美女丁香| 亚洲 国产 欧美一区| 中文一区一区三区高中清不卡免费| 欧美一级一级性生活免费录像| 国产123在线| 香蕉成人久久| 精选一区二区三区四区五区| 欧美hdxxxxx| 日韩一区二区视频| 成年人二级毛片| 蜜桃久久av一区| 日韩福利视频| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲精品v天堂中文字幕| 麻豆changesxxx国产| 久国产精品韩国三级视频| 日本一区精品| 欧美日韩不卡| 夜夜躁日日躁狠狠久久88av| 波多野结衣在线观看视频| 国产午夜三级一区二区三| 女性女同性aⅴ免费观女性恋| 国产精品网址| 91国产一区在线| 天天摸天天干天天操| 午夜影视日本亚洲欧洲精品| 亚洲啪av永久无码精品放毛片| 一区在线免费| 国产精品日韩高清| 久久影院午夜精品| 亚洲精品久久久久久久久久久久| 国产成人一区二区三区影院在线| bt欧美亚洲午夜电影天堂| 色综合久久久久无码专区| 国产一区丝袜| 青青青国产精品一区二区| 欧洲毛片在线| 欧美视频完全免费看| 香蕉成人在线视频| 国产乱码精品1区2区3区| 成年在线观看视频| 精品亚洲自拍| 日本精品视频在线观看| www.在线播放| 69久久99精品久久久久婷婷| 在线观看成人毛片| 成人精品一区二区三区四区| 久久黄色片视频| 精品久久电影| 114国产精品久久免费观看| 波多野一区二区| 亚洲人精品午夜在线观看| 中文字幕有码视频| 一区二区三区高清在线| 7788色淫网站小说| 久久激情五月激情| 大陆av在线播放| 精品av一区二区| 亚洲综合成人婷婷小说| 福利影院在线看| 中文字幕综合一区| 亚洲成人77777| 色婷婷综合五月| tube国产麻豆| 久久综合给合久久狠狠狠97色69| 亚洲一区二区三区观看| 亚洲精品影院在线观看| 永久久久久久| 啪啪国产精品| 91色在线视频| gogo亚洲高清大胆美女人体| 欧美另类99xxxxx| 国产乱理伦片a级在线观看| 欧美一区二区三区播放老司机| 一区二区三区福利视频| 最新日韩av在线| 国产精品九九九九九| 激情丁香综合五月| 日韩精品一区二区三区不卡| 欧美日韩免费观看一区=区三区| 日本成人黄色| 国产伦理久久久久久妇女 | 免费视频久久| 一级一片免费播放| 自拍自偷一区二区三区| 91一区二区三区| 亚洲精品一区三区三区在线观看| 久久免费精品视频| 国产理论在线观看| 国产亚洲精品久久久久动| 免费观看毛片网站| 91精品国产乱码| 瑟瑟视频在线免费观看| 精品久久久一区二区| 免看一级a毛片一片成人不卡| 国产精品久久久久毛片软件| 久久精品无码一区| 91麻豆免费看| 少妇被狂c下部羞羞漫画| 激情综合亚洲精品| 亚洲第一狼人区| 天堂va蜜桃一区二区三区| 老太脱裤让老头玩ⅹxxxx| 国产精品久久| 麻豆视频传媒入口| 99久久久久久中文字幕一区| 日韩视频精品| 久久99视频| 久久综合九色综合网站| 国产精品tv| 国产精品一区二区免费| 99精品美女视频在线观看热舞| 国产久一一精品| av成人免费看| 国产精品一区久久久| 精品成人av| 国产精品国产福利国产秒拍 | 福利在线播放| 亚洲一级免费视频| 国产69精品久久app免费版| 亚洲欧洲视频在线| 国产福利小视频在线观看| 国产丝袜一区视频在线观看| 欧美在线观看在线观看| 亚洲免费视频一区二区| 国产在线观看精品一区| 国产亚洲视频在线| a中文在线播放| 日韩在线资源网| 国产黄色在线观看| 欧美大片欧美激情性色a∨久久| 伦理在线一区| 欧洲日韩成人av| 精品欧美日韩精品| 成人中心免费视频| 日韩精品成人在线观看| 国产精品久久久久久久小唯西川| 欧美人与动xxxxz0oz| 欧美日本韩国在线| 国产精品99久久久久久动医院| 自拍视频一区二区三区| 国产精品www994| 日本www在线播放| 美国av一区二区| 中文字幕人妻无码系列第三区| 不卡的av电影| 调教驯服丰满美艳麻麻在线视频| 中文字幕亚洲不卡| 久久久久无码精品国产| 日韩欧美一区二区在线| 97超视频在线观看| 亚洲第一视频网站| 国产精品二线| 欧美风情在线观看| 校园春色亚洲色图| 亚洲一区中文字幕| 亚洲自拍都市欧美小说| 香蕉视频在线网址| 国产亚洲精品自拍| 日本中文字幕观看| 99热精品国产| 欧美视频一区二区在线| 亚洲国产精品嫩草影院| 中国女人一级一次看片| 精品国产制服丝袜高跟| 黄色在线免费观看大全| 另类专区欧美制服同性| 涩涩在线视频| 91福利视频导航| 第一社区sis001原创亚洲| 日本中文字幕亚洲| 久久99精品国产麻豆婷婷| 800av在线播放| 亚洲女人****多毛耸耸8| 一级一片免费看| 精品对白一区国产伦| 一区二区高清不卡| 日本亚洲精品在线观看| 综合伊人久久| 在线播放豆国产99亚洲| 国产精品久久久亚洲一区| xxx中文字幕| 中文字幕av一区二区三区免费看| 天堂网av手机版| 日韩午夜在线影院| 自拍视频在线网| 日本精品性网站在线观看| 高清一区二区三区| 粉嫩av一区二区三区天美传媒| 毛片av一区二区| x88av在线| 日韩欧美中文在线| 亚洲av无码国产综合专区| 精品国产视频在线| 国产精品高潮久久| 日本一区二区三区免费看| 香蕉久久夜色精品| 性色av蜜臀av色欲av| 亚洲国产精品久久久久婷婷884 | 国产在线播放一区三区四| 中文字幕人妻一区二区三区在线视频| 午夜成人免费电影| 狠狠躁夜夜躁av无码中文幕| 欧美乱大交做爰xxxⅹ性3| 成人av在线播放| 中国成人亚色综合网站| 日韩1区2区日韩1区2区| 最新中文字幕视频| 欧美日韩在线影院| 婷婷伊人综合中文字幕| 欧美精品第一页在线播放| 欧美二区观看| 99视频精品全部免费看| 国产一区在线观看麻豆| 久久福利免费视频| 7777精品伊人久久久大香线蕉的| 亚洲s色大片| 成人av在线亚洲| 91视频一区| 亚洲一级片免费观看| 亚洲精品高清在线观看| 精品人妻一区二区三区麻豆91 | 日韩av在线导航| 亚洲妇女成熟| 日本精品一区二区三区高清 久久| 丝袜诱惑制服诱惑色一区在线观看| 人妻少妇一区二区| 欧美在线三级电影| 日本中文字幕在线观看| 91在线网站视频| 1024日韩| 国产精品天天干| 欧美精品色综合| 羞羞的网站在线观看| 国产精品区免费视频| 亚洲综合精品| 国产农村妇女精品一区| 制服丝袜国产精品| 国产盗摄在线视频网站| 欧美性xxxx69| 久久99久久久久| 国产在线观看成人| 亚洲美女久久久| 国产成人a视频高清在线观看| 99视频精品全部免费看 | 美国黄色特级片| 91精品国产福利| www在线观看黄色| 先锋影音欧美| 国产福利91精品一区二区三区| 日韩三级av在线| 中文字幕免费国产精品| 看亚洲a级一级毛片| 波多野结衣家庭教师在线| 欧美激情自拍偷拍| 国产黄a三级三级看三级| 91国产视频在线播放| 久久免费av| 人妻av一区二区| 7777精品伊人久久久大香线蕉 | 五月开心播播网| 欧美日韩一区二区三区四区| 污污的网站在线看| 欧美一进一出视频| 国产精品一品视频| 樱花视频在线免费观看| 欧美理论电影在线播放| 国产一区二区三区天码| 高清中文字幕mv的电影|