一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

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

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

推薦:解讀鏈表的順序表示和實現(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上面看老趙寫的那幾篇文章(請看08年9月左右的文章),感覺也很有深度,有不少啟發(fā)。因此我也打算寫一點我自己的實踐經(jīng)驗,希望也能同樣給大家一些有用的啟發(fā)吧。

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

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

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

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

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

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

這兩種形式如下所示:

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

// 通過實體對象來存儲
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è)計方式下面,
// 實際上根本沒有什么必要去傳輸整個對象。
// 我們可以想象,這個時候很多的操作其實是依賴UserId和CompanyId的,
// 而我見過的“有趣”設(shè)計,是在Page_Load事件中,不管是否需要用到,
// 都會將HttpContext.Current.User.Identity以及
// GetCompanyByUserId(userId).CompanyId保存為當(dāng)前頁面的全局變量。
// 其實這樣是違背了Linq的設(shè)計初衷的。
// 下面就是一個只傳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);
   }
}

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

如果是第二種情況,其實也不見得好到哪里去。因為:

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

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

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

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

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

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

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

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

以下為引用的內(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;
            }
        }
    }

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

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

    /// <summary>
    
/// 實現(xiàn)自動拋棄當(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)限驗證
            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;
        }

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

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

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

來源:模板無憂//所屬分類:.Net教程/更新時間:2009-07-10
相關(guān).Net教程
欧美成人免费在线| 人人妻人人玩人人澡人人爽| 色噜噜久久综合伊人一本| 涩视频在线观看| 精品欧美aⅴ在线网站| 免费看毛片的网址| 99这里都是精品| 蜜桃导航-精品导航| 日韩精品一二三| 欧美精品一区二区免费| 九九热在线免费观看| 日韩电影中文字幕av| 娇妻高潮浓精白浆xxⅹ| 激情av一区二区| 搡的我好爽在线观看免费视频| 亚洲男同性恋视频| 国产一区二区视频免费在线观看| 中文字幕亚洲区| avav在线播放| 97久久精品人人做人人爽| 欧美日韩电影一区二区三区| 日韩精品一二区| 日韩中文一区二区三区| 久久婷婷成人综合色| 久久久久久av无码免费网站下载| 亚洲国产精品传媒在线观看| 九色自拍视频在线观看| 亚洲综合精品久久| 99国产精品久久久久久| 日韩一级黄色片| 国产大学生av| 欧美高清视频不卡网| 最新中文字幕视频| 在线播放日韩av| 手机在线看片1024| 国产91精品最新在线播放| 麻豆一区二区99久久久久| 欧美精品亚洲| 91天堂素人约啪| 男人靠女人免费视频网站| 亚洲在线中文字幕| x88av在线| 欧美激情视频三区| 国产综合成人久久大片91| 久久精品国产精品亚洲色婷婷| 日本精品一区二区三区四区的功能| 久久国产免费观看| 国产精品久久久久久久久男 | 日韩精品一区二区三区久久| 91国产成人在线| 99热在线观看免费精品| 91综合免费在线| 26uuu亚洲| 亚洲最大视频网| 久久亚洲私人国产精品va| 亚洲AV无码国产精品午夜字幕 | 国产精品免费久久久久久| 成+人+亚洲+综合天堂| 日韩免费高清一区二区| 色偷偷888欧美精品久久久| chinese少妇国语对白| 日韩精品影音先锋| 亚洲最大成人av| 中文字幕一区二区三区最新| 在线观看日韩精品| 在线观看亚洲欧美| 亚洲一区二区在线观| 欧美色爱综合网| 久草视频在线免费| 亚洲一区二三| 欧美一二三区在线观看| 中文字幕一区二区三区人妻四季| 另类视频在线观看+1080p| 亚洲精品国产精品乱码不99| 欧美三级韩国三级日本三斤在线观看| 久久av免费一区| 91久久精品国产91性色tv| 国产精品二区一区二区aⅴ| 51国产成人精品午夜福中文下载| 国产精品久久久久影院老司 | 免费黄色一级网站| 色yeye香蕉凹凸一区二区av| 懂色av一区二区在线播放| 国产精品91av| 国产有码在线一区二区视频| 国产人久久人人人人爽| 国产在线一二区| 一区二区三区日韩视频| 中文字幕亚洲国产| 93久久精品日日躁夜夜躁欧美| 9.1在线观看免费| 成人久久久久久久| 欧美在线你懂的| 天天干天天色天天| 中文字幕天堂av| 韩国一区二区三区美女美女秀| 欧美不卡一二三| 成人美女视频在线观看18| 国产亚洲成人av| 国产原创中文在线观看| 91国产精品91| 在线观看视频一区| 久久99久久久久| 国产乱码久久久久久| 男人操女人免费软件| 国产日韩欧美另类| 亚洲大胆美女视频| 99久久久无码国产精品| 国产精品免费无遮挡无码永久视频| 亚洲免费一级视频| 日产国产精品精品a∨| 能看的毛片网站| 亚洲一区二区视频在线| 手机看片一区二区| 国产一级视频在线| 色偷偷中文字幕| 自拍偷拍视频在线| 国产精品狼人色视频一区| 亚洲韩国青草视频| 亚洲愉拍自拍另类高清精品| 成人动漫在线一区| 神马久久久久久久久久| 国产精品美女999| 精品女同一区二区三区在线播放| 国产在线播精品第三| 日韩手机在线视频| 在线视频这里只有精品| 在线观看免费黄网站| 久久精品国产综合精品| 国产精品久久综合av爱欲tv| 日韩精品一区二区视频| 色婷婷亚洲精品| 亚洲色图一区二区三区| 久久精品亚洲乱码伦伦中文| 五月天丁香视频| 在线永久看片免费的视频| 蜜桃久久精品成人无码av| 国产精品12345| 图片区小说区区亚洲五月| 精品一区在线播放| 亚洲wwwav| 91九色视频导航| 国产精品一区二区免费看| 亚洲国产一区视频| 国产成人午夜片在线观看高清观看| 亚洲天天综合网| b站大片免费直播| 国产精品999视频| 亚洲欧洲精品在线| 亚洲日本一区二区三区在线不卡| 国产伦精品一区二区三区视频免费| 自拍偷拍亚洲一区| 永久免费看mv网站入口亚洲| 亚洲国产精品网站| 亚洲欧美日韩一区在线| 欧美一区二区三区在| 91高清在线观看| 欧美综合天天夜夜久久| 欧美性生交xxxxxdddd| 国产午夜亚洲精品理论片色戒| 久久久青草婷婷精品综合日韩| 在线观看一二三区| 国产黄色大片网站| 熟妇人妻一区二区三区四区 | 欧美va亚洲va香蕉在线| 精品欧美国产一区二区三区| 精品成人久久av| 欧美视频在线观看一区| 精品女同一区二区三区在线播放| 色综合久久综合| 在线播放视频一区| 亚洲精品一二区| 日韩精品免费在线| 欧美精品一区二区三区久久久 | а中文在线天堂| 波多野结衣激情视频| 成人精品在线播放| 国产成人久久精品77777最新版本| 91丨九色丨黑人外教| 国产精品国产成人国产三级| 亚洲成人777| 精品国产污网站| 精品国产一区二区三区久久久| 自拍偷拍欧美亚洲| 蜜臀精品一区二区三区| 五月婷婷六月色| 国产精品精品国产色婷婷| 91麻豆精品国产自产在线| 欧美高跟鞋交xxxxhd| 成人欧美一区二区三区视频xxx | 成人免费观看在线| 中文字幕在线观看的网站| 男人天堂视频在线| 欧美成人精精品一区二区频| 成人91在线观看| 一区二区三区精密机械公司| 日韩欧美成人激情| 欧洲亚洲免费视频| 婷婷久久五月天| 天天爽夜夜爽视频| 亚洲黄网在线观看| 日韩成人免费电影| 久久久国产高清| 超碰在线资源站| 午夜免费激情视频| 老妇喷水一区二区三区| 亚洲青青青在线视频| 亚洲美女自拍视频| 国产欧美日韩在线播放| 欧美—级a级欧美特级ar全黄| 久久久精品亚洲| 欧美性大战久久久久| 国产精品亚洲一区二区无码| 中文字字幕在线中文乱码| 91视频一区二区| 亚洲国内精品在线| 黑人中文字幕一区二区三区| 亚洲狠狠婷婷综合久久久久图片| 北岛玲一区二区三区四区 | 蜜臀av色欲a片无码精品一区 | 欧美日韩色综合| 日韩在线中文字| 久久精品国产99精品国产亚洲性色| 日韩亚洲欧美视频| 天天操天天操天天操天天操天天操| 亚洲一区 中文字幕| 一区二区高清视频在线观看| 欧美精品电影在线| 最近2019中文字幕mv免费看 | 91在线第一页| 免费在线不卡av| www.在线成人| 黑人糟蹋人妻hd中文字幕| 波多野结衣家庭教师在线观看| 日韩精品成人在线| 亚洲激情一二三区| 波霸ol色综合久久| 欧美一区二区中文字幕| 国产精彩视频在线观看| 国产精品人成在线观看免费 | 成人在线综合网| 在线观看欧美日韩国产| 一卡二卡三卡视频| 亚洲一区中文字幕永久在线| 亚洲网友自拍偷拍| 91精品国产91久久久| 少妇性l交大片7724com| 丁香婷婷久久久综合精品国产 | wwwwww.色| 久久久久综合| 日韩精品专区在线影院观看| 日韩av一区二区三区在线观看| 小泽玛利亚一区| 成人精品gif动图一区| 久久99久久99精品免观看粉嫩| 国模私拍视频在线观看| 国产精品一级黄| 欧美高清不卡在线| 中文字幕一区三区久久女搜查官| www.欧美日韩国产在线| 欧美日韩在线观看视频| 欧美一二三区在线观看| 97视频资源在线观看| 久久人人爽人人爽人人| 26uuu精品一区二区三区四区在线| 一区二区三区四区精品| 天天操天天操天天操天天| 久久黄色片网站| 日本高清视频在线| 亚洲人成电影在线观看天堂色| 日本不卡在线观看| 国产强被迫伦姧在线观看无码| 色婷婷久久久久swag精品| 色综合久久88色综合天天提莫| 一级aaaa毛片| 国产亚洲精品激情久久| 中文字幕第九页| 一级日本不卡的影视| 欧美日韩电影一区二区| 无码视频一区二区三区| 精品久久久久久久一区二区蜜臀| 自拍偷拍21p| 国产精品网站一区| 91久久精品国产91性色| 在线观看日本网站| 亚洲欧美日韩国产精品| 精品无码在线视频| 色婷婷综合久久| av免费播放网址| 国产成人精品aa毛片| 热99久久精品| 自拍偷拍色综合| 欧美另类极品videosbest最新版本 | 日韩免费精品视频| 中国一区二区视频| 亚洲天堂第二页| 麻豆疯狂做受xxxx高潮视频| 日韩一二三区视频| 香港三级日本三级| 亚洲影院在线观看| 黄色片视频在线播放| 99久久久精品| 日韩国产精品毛片| 国产日韩欧美一区二区三区乱码| 亚洲最大免费| 国产三级精品在线| 26uuu亚洲综合色欧美| 国产99在线播放| 久久久久国产精品免费免费搜索| 亚洲аv电影天堂网| 日韩av一二区| 精品亚洲一区二区| 五月婷婷六月婷婷| 主播福利视频一区| 日韩av第一页| 日韩欧美在线免费观看视频| 国产精品综合激情| 中文字幕亚洲欧美日韩在线不卡 | 91女人视频在线观看| 一区二区三区视频在线观看免费| 欧美三电影在线| 国产精品白嫩白嫩大学美女| 91禁国产网站| 国产在线精品一区二区| 免费在线激情视频| 欧美日韩一级黄| 色老头在线视频| 国产精品久久精品视| 国产精品青草久久| 老司机免费视频| 欧美精品xxx| 国产精品综合一区二区三区| 国内外免费激情视频| 精品久久国产老人久久综合| 99久久久久久久| 亚洲黄色网址在线观看| 欧美人狂配大交3d怪物一区 | 你懂的网址一区二区三区| 一区二区三区免费看视频| 国产黄色小视频网站| 国产精品久久国产精品99gif| 不卡的av网站| 久久亚洲AV成人无码国产野外| 7m精品福利视频导航| 久久婷婷综合激情| 国产精品偷伦视频免费观看了| 午夜激情在线视频| 伊人再见免费在线观看高清版| 欧美一区二区久久| www.97av.com| 人人干人人视频| 久久成人精品电影| 国产精品青草综合久久久久99| av女人的天堂| 国产精品久久久久久久久久久久午夜片| 精品久久久久久| www.色呦呦| 熟妇无码乱子成人精品| 日韩av电影国产| 五月综合激情网| 黄色www视频| 美女流白浆视频| 国产一区二区网站| 国产精品无码免费专区午夜| 欧美videos中文字幕| 美腿丝袜亚洲色图| 美女脱光内衣内裤| 欧美日韩在线不卡一区| 精品国产一区二区三区忘忧草 | 久久一级黄色片| 欧美激情区在线播放| 午夜黄色福利视频| 精品国产户外野外| 欧美日韩在线观看成人| 亚洲精品白虎| 久久精品99久久久久久久久| 国产精品免费aⅴ片在线观看| 天天操天天射天天爽| 少妇人妻无码专区视频| 97免费在线视频| 动漫精品一区二区| 日本女人一区二区三区| 欧美日韩国产一二三区| 日韩人妻一区二区三区蜜桃视频| 91高清免费视频| 91精品久久久久久久久99蜜臂| 成人中文字幕电影| 一级爱爱免费视频| 中文乱码字幕高清一区二区| 热99这里只有精品| 亚洲综合精品一区二区| 在线观看不卡av| 精品高清美女精品国产区| 国产精品1区2区3区在线观看| 日韩免费一级片| 国产乱淫av片| 日韩av中文字幕第一页| 国产精品一区二区在线| 亚洲精品国产精品国自产在线| 国产精品看片你懂得| 欧美精品videosex极品1| 日韩欧美在线第一页| 热久久国产精品| 欧美日韩黄色网| 久久无码高潮喷水| 国产在线一区二区三区播放| 欧美精品久久久久| 国产视频丨精品|在线观看| 亚洲国产日韩a在线播放性色| 久久91精品久久久久久秒播|