欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

怎樣在ASP.NET項(xiàng)目里面正確使用Linq to Sql_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:解讀鏈表的順序表示和實(shí)現(xiàn)
/*List.h*/ #ifndef _LIST_H #define _LIST_H #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 template

Linq to Sql 用的人也應(yīng)該有些吧,我在cnblogs上面看老趙寫的那幾篇文章(請(qǐng)看08年9月左右的文章),感覺也很有深度,有不少啟發(fā)。因此我也打算寫一點(diǎn)我自己的實(shí)踐經(jīng)驗(yàn),希望也能同樣給大家一些有用的啟發(fā)吧。

我首先想要問一下大家,Linq to Sql有哪些很特別的地方?這個(gè)問題的答案肯定五花八門,我說一下我看到的一些問題吧。

首先,Linq to Sql的基礎(chǔ)之一是DataContext,而另外一個(gè)基礎(chǔ),則是通過映射產(chǎn)生的實(shí)體類,以及這些實(shí)體類的Table<>對(duì)象。這個(gè)不是廢話嘛!我想很多人都應(yīng)該知道這個(gè)最基本的知識(shí),不過卻不見得有多少人真正注意到,或者認(rèn)真思考一下這里面的“機(jī)關(guān)”。不知道“機(jī)關(guān)”在哪里,那么就不可能寫出合適的代碼。比如說,在某個(gè)頁面里面(N層結(jié)構(gòu)沒有給弄好的情況下),或者在某個(gè)業(yè)務(wù)邏輯里面(有N層結(jié)構(gòu)),你的Linq to Sql的代碼是否是長這樣的?

以下為引用的內(nèi)容:

using (MyDataContext db = new MyDataContext)
{
  var q 
= from product in db.ProductInfos
          
where product.Price > 100
          select product;
  DoSomethingWithProducts(q.ToList());
}

“對(duì)啊,就是長這樣的,有什么問題嗎?”當(dāng)然有問題啦,否則我也不寫這個(gè)隨筆了。不知道大家有沒有想過這么一個(gè)問題,什么叫做Context?Context就是上下文,上下文的意思就是,依賴于這個(gè)上下文的對(duì)象,必須存活在這個(gè)上下文里面。脫離了這個(gè)上下文,那些對(duì)象就會(huì)出現(xiàn)錯(cuò)誤。事實(shí)上也確實(shí)如此:在上面的例子里面,從ProductInfos中得到的q.ToList(),里面的每一個(gè)元素都依賴于MyDataContext。換句話說MyDataContext如果被注銷了,q.ToList()生成的對(duì)象也就會(huì)“部分功能失效”。

“失效就失效好了,反正該做的工作已經(jīng)做完了,q.ToList()也已經(jīng)利用完了。”不錯(cuò),在上面的例子里面,不會(huì)發(fā)生什么錯(cuò)誤。不過這么寫的話,會(huì)比較難使用的。為什么這么說?我舉一個(gè)具體的例子:這個(gè)網(wǎng)站需要用戶登錄,而所有的業(yè)務(wù)邏輯幾乎都依賴于當(dāng)前用戶。如果說,我們使用上面的using模式,那么我估計(jì)你的代碼不外乎是如下兩種情況:

1、每一次需要當(dāng)前用戶的地方,你都需要從數(shù)據(jù)庫讀取;或者

2、你把當(dāng)前用戶保存為全局變量了,但是你發(fā)現(xiàn)currentUser.CompanyInfo因?yàn)樯舷挛囊呀?jīng)拋棄了,因此是無法使用的,業(yè)務(wù)層不得不每一次都重新從數(shù)據(jù)庫讀取該用戶所屬公司的數(shù)據(jù)。

這兩種形式如下所示:

以下為引用的內(nèi)容:

// 通過實(shí)體對(duì)象來存儲(chǔ)
public double GetCurrentBalanceByObject()
{
   
int userId;
   
int.TryParse(HttpContext.Current.User.Identity, out userId);
   UserInfo user 
= GetUser(userId);
   CompanyInfo company 
= GetCompanyByUser(user);
   IQueryable
<TransactionInfo> transactions = GetTransactionsByCompany(company);
   
return transactions.Sum(item => item.Amount);
}

public UserInfo GetUser(int userId)
{
   
using(MyDataContext context = new MyDataContext)
   {
      
return context.UserInfos.Where(item => item.UserId == userId).FirstOrDefault();
   }
}

public CompanyInfo GetCompanyByUser(UserInfo user)
{
   
using(MyDataContext context = new MyDataContext)
   {
      
return context.CompanyInfos.Where(item => item.UserId == user.Id).FirstOrDefault();
   }
}

public IQueryable<Transaction> GetTransactionsByCompany(CompanyInfo company)
{
   
using(MyDataContext context = new MyDataContext)
   {
      
return context.TransactionInfos.Where(item => item.CompnayId == company.Id);
   }
}

// 實(shí)際上很容易就退化為通過鍵值來存儲(chǔ),因?yàn)樵谶@種設(shè)計(jì)方式下面,
// 實(shí)際上根本沒有什么必要去傳輸整個(gè)對(duì)象。
// 我們可以想象,這個(gè)時(shí)候很多的操作其實(shí)是依賴UserId和CompanyId的,
// 而我見過的“有趣”設(shè)計(jì),是在Page_Load事件中,不管是否需要用到,
// 都會(huì)將HttpContext.Current.User.Identity以及
// GetCompanyByUserId(userId).CompanyId保存為當(dāng)前頁面的全局變量。
// 其實(shí)這樣是違背了Linq的設(shè)計(jì)初衷的。
// 下面就是一個(gè)只傳Id的做法:
public double GetCurrentBalanceByObject()
{
   
int userId;
   
int.TryParse(HttpContext.Current.User.Identity, out userId);
   CompanyInfo company 
= GetCompanyByUserId(userId);
   IQueryable
<TransactionInfo> transactions = GetTransactionsByCompanyId(company.CompanyId);
   
return transactions.Sum(item => item.Amount);
}

public CompanyInfo GetCompanyByUser(int userId)
{
   
using(MyDataContext context = new MyDataContext)
   {
      
return context.CompanyInfos.Where(item => item.UserId == userId).FirstOrDefault();
   }
}

public IQueryable<Transaction> GetTransactionsByCompanyId(int companyId)
{
   
using(MyDataContext context = new MyDataContext)
   {
      
return context.TransactionInfos.Where(item => item.CompnayId == companyId);
   }
}

如果你是第一種情況,那么很明顯,你會(huì)有大量重復(fù)的SQL調(diào)用。

如果是第二種情況,其實(shí)也不見得好到哪里去。因?yàn)椋?/p>

1、currentUser可能不需要經(jīng)常取,但相關(guān)的其它內(nèi)容,由于上下文各自獨(dú)立,你還是經(jīng)常在重復(fù)的獲取的;

2、有一個(gè)地方你無法繞過去——如果你要修改當(dāng)前用戶的屬性,而這個(gè)全局的當(dāng)前用戶不是當(dāng)前Context產(chǎn)生的,你還非得從當(dāng)前Context取出來,然后再修改;

3、因?yàn)閏urrentUser的上下文已經(jīng)被拋棄了,因此程序會(huì)很容易設(shè)計(jì)成傳入的不是一個(gè)UserInfo,而是一個(gè)int類型的Id值,否則底層很容易一不小心就用到這個(gè)實(shí)際上功能不全的對(duì)象,然后就拋出異常了。但這樣做的后果是,獲取同一個(gè)類型的實(shí)體對(duì)象,可能會(huì)有各種不同的重載形式,例如:

以下為引用的內(nèi)容:

IQueryable<TransactionInfo> GetTransactionsByUserId(int userId);
IQueryable
<TransactionInfo> GetTransactionsByCompanyId(int companyId);

因?yàn)檫@種設(shè)計(jì)實(shí)施之后,有時(shí)很可能就會(huì)出現(xiàn)只有userId的情況,那么這個(gè)時(shí)候即使UserInfo對(duì)象中其實(shí)也存在CompanyId的值,也還是要重新獲取一遍UserInfo對(duì)象。為了簡化這一過程,就可能會(huì)產(chǎn)生不同的獲取形式。

這樣設(shè)計(jì)完整個(gè)系統(tǒng)之后一跑,看著好像沒什么,但真正上線卻發(fā)現(xiàn)有點(diǎn)慢。當(dāng)我們打開Sql server的Profiler一看,會(huì)發(fā)現(xiàn)很簡單的一個(gè)頁面的訪問,其數(shù)據(jù)庫訪問會(huì)搞到幾十次甚至上百次,其中有很多Sql語句是完全重復(fù)的。

這個(gè)問題怎么解決呢?有人會(huì)說,加個(gè)緩存機(jī)制吧。也許吧,但這種增加復(fù)雜度的設(shè)計(jì),我覺得還是不得已而為之的一種做法。我認(rèn)為更好的解決辦法是,將上下文在當(dāng)前頁面中緩存起來。所謂的上下文,就是一種運(yùn)行環(huán)境,而一次頁面訪問,其環(huán)境應(yīng)該是相同的。首先,我們對(duì)MyDataContext做一個(gè)擴(kuò)展:

以下為引用的內(nèi)容:

    partial class MyDataContext
    {
        
private const string c_KeyCurrentHttpContext = "chctx";

        
static public MyDataContext CurrentHttpContext
        {
            
get
            {
                MyDataContext context 
= CurrentHttpContextWeak;
                
if (context == null)
                {
                    context 
= new MyDataContext();
                    CurrentHttpContextWeak 
= context;
                }
                
return context;
            }
        }

        
static private MyDataContext CurrentHttpContextWeak
        {
            
get
            {
                
return HttpContext.Current.Items[c_KeyCurrentHttpContext] as MyDataContext;
            }
            
set
            {
                HttpContext.Current.Items[c_KeyCurrentHttpContext] 
= value;
            }
        }

        
static internal void TryDisposeCurrentHttpContext()
        {
            MyDataContext context 
= CurrentHttpContextWeak;
            
if (context != null)
            {
                context.Dispose();
                CurrentHttpContextWeak 
= null;
            }
        }
    }

然后我們再制作一個(gè)HttpModule(并且在web.config里面配置好):

以下為引用的內(nèi)容:

    /// <summary>
    
/// 實(shí)現(xiàn)自動(dòng)拋棄當(dāng)前數(shù)據(jù)庫上下文的模塊
    
/// </summary>
    public class MyDataContextAutoDisposeModule : IHttpModule
    {
        
#region IHttpModule Members

        
private HttpApplication _context;
        
public void Init(HttpApplication context)
        {
            _context 
= context;
            context.PostRequestHandlerExecute 
+= new EventHandler(context_PostRequestHandlerExecute);
        }

        
void context_PostRequestHandlerExecute(object sender, EventArgs e)
        {
            MyDataContext.TryDisposeCurrentHttpContext();
        }

        
#endregion
    }

接下來,我們只要在邏輯層這么直接寫即可:

以下為引用的內(nèi)容:

        public static IQueryable<TransactionInfo> GetCompanyAccountDetails(UserInfo operatorUser, EAccountName account)
        {
            
// 權(quán)限驗(yàn)證
            if (!operatorUser.Permissions.Contains(EUserPermissions.ViewAccountDetails))
                CLog.CurrentHttpContext.ThrowFailedException(
new CPermissionException(EUserPermissions.ViewAccountDetails));

            var q 
= MyDataContext.CurrentHttpContext.TransactionInfos.Where(t => t.CompanyId == operatorUser.CompanyId && t.AccountName == account);
            
return q;
        }

這么改造完之后,你會(huì)發(fā)現(xiàn)幾乎可以在所有地方直接返回IQueryable(除了有的時(shí)候Linq to Sql本身有Bug),整個(gè)邏輯層內(nèi)的設(shè)計(jì)變得簡單化:一開始檢查各種參數(shù)(是否具備完整或者部分權(quán)限),然后根據(jù)檢查結(jié)果做完全信賴的操作。由于返回的是實(shí)體對(duì)象,或者IQueryable,幾乎所有重復(fù)性的Sql調(diào)用也隨之自然消失了。如果有所懷疑的話,您可以用Sql Profiler自行做修改前后的對(duì)比,看看效果是否“驚人”?

也許有人會(huì)質(zhì)疑,這樣好嗎?豈不是通過user.Company.Transactions就可以得到所有的Transaction了?沒錯(cuò),如果所有東西都是公開的話,就會(huì)有這個(gè)問題。如果要徹底解決這樣的問題,需要將這些部分變成對(duì)邏輯層可見,而對(duì)其它層不可見的修飾方式——比如兩層在一個(gè)dll里面,這些屬性是internal的,或者放在兩個(gè)dll里面并且打上InternalsVisibleTo標(biāo)記。通過這種方式,就可以避免上層直接查找DAL中一些在BLL中需要經(jīng)過權(quán)限檢查才可以得到的內(nèi)容。當(dāng)然,如果項(xiàng)目比較小的情況下,你也可以選擇不要這么麻煩,直接控制代碼質(zhì)量即可(要求有些東西必須通過BLL來獲得)。

分享:淺談ASP.NET中顯示Linq To SQL輸出的SQL語句
最近在使用Linq To SQL的時(shí)候,為了了解不同Linq語句對(duì)性能造成的不同影響,需要獲得Linq To SQL生成的SQL語句。 如果是在桌面程序中,只需要 _context.Log = Console.Out; 即可在控制臺(tái)輸出SQL語句。可是在ASP.NET中又該怎么辦呢? 這時(shí)我想起了StringWriter

來源:模板無憂//所屬分類:.Net教程/更新時(shí)間:2009-07-10
相關(guān).Net教程
久久777国产线看观看精品| 国产激情精品久久久第一区二区 | 国模大尺度视频| 亚洲一级在线播放| 我不卡手机影院| 日韩美女毛片| 成人a区在线观看| 精品1区2区在线观看| 成人欧美一区二区三区视频| 中文字幕制服丝袜| 天堂av一区二区三区| 午夜精品电影| 亚洲国产成人tv| www.欧美精品一二三区| 一区高清视频| 国产精品老熟女一区二区| 在线精品国产亚洲| 久久这里只有精品首页| 国产亚洲视频在线| 国产经典久久久| 日本一级一片免费视频| 国产另类在线| 国产婷婷色一区二区三区四区 | 中文字幕欧美日韩一区二区| 男人的午夜天堂| 一区二区三区视频播放| 91在线国内视频| 亚洲人成网7777777国产| 日韩国产美国| 国产黄色大片免费看| 久久精品一级| 91首页免费视频| 色婷婷av一区二区三区久久| 特级西西444| 国产微拍精品一区| 图片小说视频色综合| 亚洲一区二区三区影院| 国产成人精品视| 四川一级毛毛片| 欧美激情喷水| 国产成人免费在线观看不卡| 精品小视频在线| 中文字幕超清在线免费观看| 亚洲天堂岛国片| 精品按摩偷拍| 国产视频一区二区在线观看| 97在线公开视频| 国产不卡精品视男人的天堂| 欧美猛交免费看| 国产精品国产亚洲精品看不卡| 国产真人无遮挡作爱免费视频| 国产精品片aa在线观看| 亚洲色图丝袜美腿| 国产999在线| 中文字幕乱码免费| av在线观看地址| 国产又粗又猛又黄视频| 亚洲成人精品| 欧美亚洲图片小说| 国产伦视频一区二区三区| 国产wwwwxxxx| 国产欧美日韩免费观看| 亚洲人体在线| 欧洲一区在线| 久久先锋影音av| 九九九久久久久久| 91欧美视频在线| 成人在线网站| 久久久久青草大香线综合精品| 欧美日韩xxx| 岛国av在线免费| 久久99久久99精品免观看软件| 成人精品在线视频观看| 欧美精品免费在线| 成人欧美一区二区| www.xxxx日本| 女人天堂亚洲aⅴ在线观看| 欧美三级韩国三级日本三斤| 日韩久久不卡| 波多野结衣不卡| 免费日韩视频| 亚洲欧美中文日韩v在线观看| 日本wwww视频| 2020国产精品小视频| 亚洲精品一二三区| 国产伦理一区二区三区| 国产中文字幕视频| 久久精品国产网站| 欧美激情第6页| 真人bbbbbbbbb毛片| heyzo久久| 日韩欧美一级精品久久| 青娱乐自拍偷拍| 日韩一级二级| 一区二区三区小说| 欧美激情第一页在线观看| 国产成人av免费| 国产成人av电影免费在线观看| 97涩涩爰在线观看亚洲| 亚洲黄色网址大全| 激情丁香综合| 在线观看视频99| 中文字幕一二三区| 九色精品91| 日韩一级大片在线观看| 国产在线青青草| 国产视频一区二| 午夜精品久久久久久| 视频一区二区精品| 欧美一区二区三区激情| 中文字幕一区二区三区在线观看 | 在线播放精品视频| www.在线欧美| 国产日韩欧美在线视频观看| 国产性xxxx高清| 国产在线精品一区二区夜色| 7m精品福利视频导航| 99精品中文字幕| 翔田千里一区二区| 欧美精品免费在线观看| 人妻视频一区二区| av不卡在线| 欧美另类第一页| 天天躁夜夜躁狠狠是什么心态| 欧美日本一区二区视频在线观看 | 国产午夜精品久久久久久免费视 | 欧美国产偷国产精品三区| 精品久久久影院| 精品日韩久久久| 深爱激情综合网| 精品少妇一区二区三区在线播放| 麻豆一区二区三区视频| 色综合久久中文| 日韩欧美aaaaaa| 777视频在线| 国产精品嫩草影院在线看| 国产一区日韩一区| jjzz黄色片| 日本免费一级视频| 一区二区三区www污污污网站| 成人美女视频在线观看| 成人欧美一区二区三区在线 | 久久久免费精品| 无码人妻丰满熟妇啪啪欧美| 亚洲精品乱码| 久久久久九九九九| 一区在线电影| 国产孕妇孕交大片孕| 国产亚洲欧洲997久久综合| 国产一区免费在线观看| www.成人精品| 亚洲在线视频网站| 69精品丰满人妻无码视频a片| 日韩在线激情| 欧美日韩日日摸| the porn av| 久久综合成人| 日韩视频欧美视频| 成人性生活毛片| 国产电影精品久久禁18| 91中文字幕在线观看| 91色在线播放| 亚洲欧美国产毛片在线| 男人日女人的bb| 亚洲精品在线国产| 精品国产精品一区二区夜夜嗨| 最好看的中文字幕| 一区免费视频| 97在线看免费观看视频在线观看| 国产女同在线观看| 久久伊人蜜桃av一区二区| 欧美凹凸一区二区三区视频 | 国产亚洲精品91在线| 亚洲性猛交xxxx乱大交| 久久99精品久久久久久久久久久久| 国产精品专区一| 国产绳艺sm调教室论坛| 亚洲国产成人精品视频| 一本大道熟女人妻中文字幕在线 | 91亚洲精华国产精华| 99精品国产99久久久久久97| 欧美日本在线观看| 在线一区免费| 日韩精品一区二区在线| 精品国产aⅴ一区二区三区东京热| 亚洲自拍偷拍网| 午夜精品福利在线观看| 国产午夜性春猛交ⅹxxx| 国产亚洲欧洲一区高清在线观看| 亚洲欧美日韩精品久久久 | 在线中文字幕不卡| 中日韩av在线播放| 在线 亚洲欧美在线综合一区| 情事1991在线| 91国内精品视频| 亚洲成人自拍偷拍| 天天操天天爱天天爽| 午夜久久tv| 91精品国产高清自在线看超| 久久久精品视频在线观看| 91看片就是不一样| 一本到12不卡视频在线dvd| 欧美激情极品视频| 亚洲中文字幕无码爆乳av| 亚洲欧美另类久久久精品2019| 超碰成人免费在线| 久久国产成人午夜av影院宅| 欧美极品xxxx| 中国精品一区二区| 亚洲国产日韩综合久久精品| 亚洲少妇久久久| 亚洲三级网站| 91九色国产在线| 欧美日韩123区| 欧美成人欧美edvon| 亚洲国产天堂av| 成人一级片在线观看| 亚洲ai欧洲av| 亚洲肉体裸体xxxx137| 欧美成人亚洲成人日韩成人| 日韩精品成人免费观看视频| 一级中文字幕一区二区| 邪恶网站在线观看| 久久久久在线| 国产在线精品一区二区中文| 99综合久久| 国产亚洲欧美日韩精品| 国产大片中文字幕| 亚洲欧美精品午睡沙发| 簧片在线免费看| 国产精品视频| 国产日产精品一区二区三区四区| 国产美女亚洲精品7777| 伊是香蕉大人久久| caoporn国产| 精品成人乱色一区二区| 中文字幕乱码在线人视频| 激情综合亚洲精品| 一区二区不卡视频| 欧美色就是色| 国产精品9999| 日韩精品一区二区三区av| 日韩久久精品成人| 国产情侣在线视频| 五月婷婷综合网| 五月天丁香社区| 国产.精品.日韩.另类.中文.在线.播放| 亚洲欧洲一区二区福利| 欧美日韩在线二区| 国产精品久久久久久久久免费看| 成人一区福利| 亚洲欧美日韩另类| 国产精品视频一区在线观看| 日韩欧美在线免费| 亚洲调教欧美在线| 久久夜色精品一区| 十八禁视频网站在线观看| 亚洲黄页一区| 国内视频一区| 秋霞综合在线视频| 日本免费一区二区三区视频观看| 惠美惠精品网| 中文字幕在线看视频国产欧美在线看完整| 在线免费观看av网址| 欧美日韩免费观看一区二区三区| 国产视频不卡在线| 亚洲欧美一区二区在线观看| 国内自拍第二页| 国产精品夜夜爽| 久久99久久99精品| 噜噜噜躁狠狠躁狠狠精品视频| 欧美男人的天堂| 日韩中文在线电影| 91av一区二区三区| 日韩在线麻豆| 国产精品久久电影观看| 祥仔av免费一区二区三区四区| 日韩视频免费大全中文字幕| 精品人妻午夜一区二区三区四区| 亚洲精品一区二区三区在线观看| 日韩黄色一级大片| 欧美性色黄大片| 亚洲成人生活片| 欧美日韩人人澡狠狠躁视频| 成人在线手机视频| 亚洲毛片av在线| 无码人妻aⅴ一区二区三区| 国产欧美日产一区| 欧美高清精品一区二区| 99久久夜色精品国产网站| 宅男噜噜噜66国产免费观看| 国产一区999| 水蜜桃色314在线观看| 秋霞影院一区二区| 日本道在线视频| 老妇喷水一区二区三区| 欧美亚洲视频一区| 国产精品一区亚洲| 欧美h视频在线观看| 99在线观看免费视频精品观看| 日韩电影在线播放| 在线免费高清一区二区三区| 亚洲国产一区二区三区在线播| 韩国一区二区三区在线观看| 日韩和欧美的一区二区| 黑丝一区二区三区| 手机成人在线| 国产精品毛片| 一本—道久久a久久精品蜜桃| 一本色道精品久久一区二区三区 | 午夜日韩成人影院| 欧美精品在线观看91| 人人鲁人人莫人人爱精品| 欧美日本中文字幕| 韩国理伦片久久电影网| 1769国产精品| 欧美中文高清| 国产精品免费视频xxxx| 群体交乱之放荡娇妻一区二区 | 国产在线精品一区二区三区》| 色综合天天综合网中文字幕| 久热国产精品视频一区二区三区| 欧美啪啪一区| 一区二区三区电影| 米奇777在线欧美播放| www污在线观看| 韩国三级中文字幕hd久久精品| 日本在线观看a| 成人国产在线观看| 欧美体内she精高潮| 国产精品乱子久久久久| 性欧美丰满熟妇xxxx性仙踪林| 亚洲国产精品视频| 久久国产高清视频| 欧美日韩成人综合| 中文字幕手机在线视频| 亚洲国产精品人久久电影| 亚洲黄色在线播放| 欧美国产亚洲精品久久久8v| 亚洲毛片在线免费| 国产免费一区视频观看免费| 精品视频网站| 欧美在线日韩精品| 日日夜夜精品免费视频| 国产一区二区三区精彩视频| 91麻豆文化传媒在线观看| 亚洲av永久无码精品| 亚洲自拍与偷拍| 久久久久久激情| 日韩精品专区在线| 国产成人精品a视频| 欧美日韩中文字幕| 黄色小视频在线免费看| 精品欧美一区二区久久| www日本高清| 国内精品小视频在线观看| 丁香一区二区| 国产欧美日韩综合精品二区| 中国女人久久久| 日韩av资源在线| 国产日产欧美一区| 亚洲熟妇一区二区三区| 91国模大尺度私拍在线视频| 国产精品传媒在线观看| 色偷偷91综合久久噜噜| 国产精品一区二区三区四区在线观看| 成人福利网站在线观看| 欧美国产激情| 国产中文字幕乱人伦在线观看| 99久久久久免费精品国产 | 国产精品视频yy9299一区| 摸摸摸bbb毛毛毛片| 欧美日韩高清一区二区三区| 99er热精品视频| 久久久久久久999| 色吊丝一区二区| 亚洲人成77777| 国产揄拍国内精品对白| 欧美激情一区二区三区p站| 一本到不卡免费一区二区| 中文字幕乱码无码人妻系列蜜桃| 久久精品99国产精品酒店日本| 2021年精品国产福利在线| 久久久久无码国产精品一区| 日韩激情视频在线观看| 热久久久久久久久| 亚洲不卡av一区二区三区| 精品久久久久久久久久久国产字幕| 久久精品人人爽| 久久精品色播| 亚洲三级一区| 高清日韩电视剧大全免费| 国产肥白大熟妇bbbb视频| 欧美一区二区三区白人| 国偷自产一区二区免费视频| 成人午夜在线影院| 性色av一区二区怡红| 操人视频免费看| 在线观看国产日韩| 亚洲女人18毛片水真多|