国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

EFCore高級(jí)Saas系統(tǒng)下單DbContext如何支持不同數(shù)據(jù)庫(kù)的遷移

共 14733字,需瀏覽 30分鐘

 ·

2022-07-27 06:12

前言

隨著系統(tǒng)的不斷開發(fā)和迭代默認(rèn)的efcore功能十分強(qiáng)大,但是隨著Saas系統(tǒng)的引進(jìn)efcore基于表字段的多租戶模式已經(jīng)非常完美了,但是基于數(shù)據(jù)庫(kù)的多租戶也是可以用的,但是也存在缺點(diǎn),缺點(diǎn)就是沒有辦法支持不同數(shù)據(jù)庫(kù),migration support multi database provider with single dbcontext,本人不才,查詢了一下,官方文檔只說(shuō)明了dbcontext的遷移如何實(shí)現(xiàn)多數(shù)據(jù)源,但是缺不是單個(gè)dbcontext,這個(gè)就讓人很頭疼。所以秉著嘗試一下的原則進(jìn)行了這篇博客的編寫,因?yàn)楸救酥挥衜msql和mysql所以這次就用這兩個(gè)數(shù)據(jù)庫(kù)來(lái)做測(cè)試

廣告時(shí)間

本人開發(fā)了一款efcore的分表分庫(kù)讀寫分離組件

https://github.com/dotnetcore/sharding-core

希望有喜歡的小伙伴給我點(diǎn)點(diǎn)star謝謝

那么廢話不多說(shuō)我們馬上開始migration support multi database provider with single dbcontext

新建項(xiàng)目

1.按裝依賴

2.新建一個(gè)User類

[Table(nameof(User))]
public class User{
public string UserId { get; set; }
public string UserName { get; set; }
}

3.創(chuàng)建DbContext

public class MyDbContext:DbContext
{
public DbSet<User> Users { get; set; }
public MyDbContext(DbContextOptions<MyDbContext> options):base(options)
{

}

4.StartUp配置

var provider = builder.Configuration.GetValue("Provider", "UnKnown");//Add-Migration InitialCreate -Context MyDbContext -OutputDir Migrations\SqlServer -Args "--provider SqlServer"//Add-Migration InitialCreate -Context MyDbContext -OutputDir Migrations\MySql -Args "--provider MySql"builder.Services.AddDbContext<MyDbContext>(options =>
{
_ = provider switch
{ "MySql" => options.UseMySql("server=127.0.0.1;port=3306;database=DBMultiDataBase;userid=root;password=L6yBtV6qNENrwBy7;", new MySqlServerVersion(new Version())), "SqlServer" => options.UseSqlServer("Data Source=localhost;Initial Catalog=DBMultiDataBase;Integrated Security=True;"),
_ => throw new Exception($"Unsupported provider: {provider}")
};
});

遷移區(qū)分?jǐn)?shù)據(jù)庫(kù)

新建一個(gè)遷移命名空間提供者


public interface IMigrationNamespace
{ string GetNamespace();
}

mysql和sqlserver的實(shí)現(xiàn)分別是項(xiàng)目名稱遷移文件夾

    public class MySqlMigrationNamespace:IMigrationNamespace
{
public string GetNamespace()
{ return "EFCoreMigrateMultiDatabase.Migrations.MySql";
}
}

public class SqlServerMigrationNamespace:IMigrationNamespace
{
public string GetNamespace()
{ return "EFCoreMigrateMultiDatabase.Migrations.SqlServer";
}
}

efcore擴(kuò)展

添加efcore擴(kuò)展

    public class MigrationNamespaceExtension : IDbContextOptionsExtension
{
public IMigrationNamespace MigrationNamespace { get; }

public MigrationNamespaceExtension(IMigrationNamespace migrationNamespace)
{
MigrationNamespace = migrationNamespace;
}
public void ApplyServices(IServiceCollection services)
{
services.AddSingleton<IMigrationNamespace>(sp => MigrationNamespace);
}

public void Validate(IDbContextOptions options)
{
}


public DbContextOptionsExtensionInfo Info => new MigrationNamespaceExtensionInfo(this);

private class MigrationNamespaceExtensionInfo : DbContextOptionsExtensionInfo
{
private readonly MigrationNamespaceExtension _migrationNamespaceExtension;
public MigrationNamespaceExtensionInfo(IDbContextOptionsExtension extension) : base(extension)
{
_migrationNamespaceExtension = (MigrationNamespaceExtension)extension;
}

public override int GetServiceProviderHashCode() => _migrationNamespaceExtension.MigrationNamespace.GetNamespace().GetHashCode();

public override bool ShouldUseSameServiceProvider(DbContextOptionsExtensionInfo other) => true;

public override void PopulateDebugInfo(IDictionary<string, string> debugInfo)
{
}

public override bool IsDatabaseProvider => false;
public override string LogFragment => "MigrationNamespaceExtension";
}
}

重寫MigrationsAssembly支持多數(shù)據(jù)庫(kù)

    public class EFCoreMultiDatabaseMigrationsAssembly: IMigrationsAssembly
{
public string MigrationNamespace { get; }
private readonly IMigrationsIdGenerator _idGenerator;
private readonly IDiagnosticsLogger<DbLoggerCategory.Migrations> _logger;
private IReadOnlyDictionary<string, TypeInfo>? _migrations;
private ModelSnapshot? _modelSnapshot;
private readonly Type _contextType; /// <summary>
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary>
public EFCoreMultiDatabaseMigrationsAssembly(
IMigrationNamespace migrationNamespace,
ICurrentDbContext currentContext,
IDbContextOptions options,
IMigrationsIdGenerator idGenerator,
IDiagnosticsLogger<DbLoggerCategory.Migrations> logger)

{

_contextType = currentContext.Context.GetType();

var assemblyName = RelationalOptionsExtension.Extract(options)?.MigrationsAssembly;
Assembly = assemblyName == null
? _contextType.Assembly
: Assembly.Load(new AssemblyName(assemblyName));

MigrationNamespace = migrationNamespace.GetNamespace();
_idGenerator = idGenerator;
_logger = logger;
} /// <summary>
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary>
public virtual IReadOnlyDictionary<string, TypeInfo> Migrations
{
get
{
IReadOnlyDictionary<string, TypeInfo> Create()
{
var result = new SortedList<string, TypeInfo>();
var items
= from t in Assembly.GetConstructibleTypes()
where t.IsSubclassOf(typeof(Migration))&& print(t)
&& t.Namespace.Equals(MigrationNamespace)
&& t.GetCustomAttribute<DbContextAttribute>()?.ContextType == _contextType
let id = t.GetCustomAttribute<MigrationAttribute>()?.Id
orderby id
select (id, t);
Console.WriteLine("Migrations:" + items.Count());
foreach (var (id, t) in items)
{ if (id == null)
{
_logger.MigrationAttributeMissingWarning(t); continue;
}

result.Add(id, t);
} return result;
} return _migrations ??= Create();
}
}

private bool print(TypeInfo t)
{
Console.WriteLine(MigrationNamespace);
Console.WriteLine(t.Namespace); return true;
} /// <summary>
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary>
public virtual ModelSnapshot? ModelSnapshot
=> GetMod();

private ModelSnapshot GetMod()
{
Console.WriteLine("_modelSnapshot:"+ _modelSnapshot); if (_modelSnapshot == null)
{
Console.WriteLine("_modelSnapshot:null");
_modelSnapshot = (from t in Assembly.GetConstructibleTypes()
where t.IsSubclassOf(typeof(ModelSnapshot)) && print(t)
&& MigrationNamespace.Equals(t?.Namespace)
&& t.GetCustomAttribute<DbContextAttribute>()?.ContextType == _contextType
select (ModelSnapshot)Activator.CreateInstance(t.AsType())!)
.FirstOrDefault();

Console.WriteLine("_modelSnapshot:" + _modelSnapshot);
} return _modelSnapshot;
} /// <summary>
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary>
public virtual Assembly Assembly { get; } /// <summary>
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary>
public virtual string? FindMigrationId(string nameOrId)
=> Migrations.Keys
.Where(
_idGenerator.IsValidId(nameOrId) // ReSharper disable once ImplicitlyCapturedClosure
? id => string.Equals(id, nameOrId, StringComparison.OrdinalIgnoreCase)
: id => string.Equals(_idGenerator.GetName(id), nameOrId, StringComparison.OrdinalIgnoreCase))
.FirstOrDefault(); /// <summary>
/// This is an internal API that supports the Entity Framework Core infrastructure and not subject to
/// the same compatibility standards as public APIs. It may be changed or removed without notice in
/// any release. You should only use it directly in your code with extreme caution and knowing that
/// doing so can result in application failures when updating to a new Entity Framework Core release.
/// </summary>
public virtual Migration CreateMigration(TypeInfo migrationClass, string activeProvider)
{
Console.WriteLine(migrationClass.FullName);

var migration = (Migration)Activator.CreateInstance(migrationClass.AsType())!;
migration.ActiveProvider = activeProvider; return migration;
}
}
折疊

編寫startup

參考 https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/providers?tabs=vs

//Add-Migration InitialCreate -Context MyDbContext -OutputDir Migrations\SqlServer -Args "--provider SqlServer"//Add-Migration InitialCreate -Context MyDbContext -OutputDir Migrations\MySql -Args "--provider MySql"//update-database -Args "--provider MySql"//update-database -Args "--provider SqlServer"builder.Services.AddDbContext<MyDbContext>(options =>
{
options.ReplaceService<IMigrationsAssembly, EFCoreMultiDatabaseMigrationsAssembly>();
_ = provider switch
{ "MySql" => options.UseMySql("server=127.0.0.1;port=3306;database=DBMultiDataBase;userid=root;password=L6yBtV6qNENrwBy7;", new MySqlServerVersion(new Version()))
.UseMigrationNamespace(new MySqlMigrationNamespace()), "SqlServer" => options.UseSqlServer("Data Source=localhost;Initial Catalog=DBMultiDataBase;Integrated Security=True;")
.UseMigrationNamespace(new SqlServerMigrationNamespace()),
_ => throw new Exception($"Unsupported provider: {provider}")
};
});

到此為止我這邊想我們應(yīng)該已經(jīng)實(shí)現(xiàn)了把,但是如果我們分別執(zhí)行兩個(gè)遷移命令會(huì)導(dǎo)致前一個(gè)遷移命令被覆蓋掉,經(jīng)過(guò)一整個(gè)下午的debug調(diào)試最后發(fā)現(xiàn)是因?yàn)樵谶w移腳本生成寫入文件的時(shí)候會(huì)判斷當(dāng)前DbContext'的ModelSnapshot,同一個(gè)dbcontext生成的文件是一樣的,所以我們這邊有兩個(gè)選擇

  • 1.讓生成的文件名不一樣

  • 2.讓ModelSnapshot不進(jìn)行深度查詢只在當(dāng)前目錄下處理
    這邊選了第二種

    public class MyMigrationsScaffolder: MigrationsScaffolder
{
private readonly Type _contextType;
public MyMigrationsScaffolder(MigrationsScaffolderDependencies dependencies) : base(dependencies)
{
_contextType = dependencies.CurrentContext.Context.GetType();
}
protected override string GetDirectory(string projectDir, string? siblingFileName, string subnamespace)
{
var defaultDirectory = Path.Combine(projectDir, Path.Combine(subnamespace.Split('.'))); if (siblingFileName != null)
{ if (!siblingFileName.StartsWith(_contextType.Name + "ModelSnapshot."))
{
var siblingPath = TryGetProjectFile(projectDir, siblingFileName); if (siblingPath != null)
{
var lastDirectory = Path.GetDirectoryName(siblingPath)!; if (!defaultDirectory.Equals(lastDirectory, StringComparison.OrdinalIgnoreCase))
{
Dependencies.OperationReporter.WriteVerbose(DesignStrings.ReusingNamespace(siblingFileName)); return lastDirectory;
}
}
}
} return defaultDirectory;
}
}

添加designservices

    public class MyMigrationDesignTimeServices: IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<IMigrationsScaffolder, MyMigrationsScaffolder>();
}
}

遷移

分別運(yùn)行兩個(gè)遷移命令

運(yùn)行更新數(shù)據(jù)庫(kù)命令

記得我們需要在參數(shù)里面添加選項(xiàng)

下期預(yù)告

下期我們將實(shí)現(xiàn)efcore在Saas系統(tǒng)下的多租戶+code-first(遷移)+分表+分庫(kù)+讀寫分離+動(dòng)態(tài)分表+動(dòng)態(tài)分庫(kù)+動(dòng)態(tài)讀寫分離+動(dòng)態(tài)添加多租戶 全程零sql腳本的解決方案

是不是buffer疊滿

最后的最后

附上demo:EFCoreMigrateMultiDatabase https://github.com/xuejmnet/EFCoreMigrateMultiDatabase

您都看到這邊了確定不點(diǎn)個(gè)star或者贊嗎,一款.Net不得不學(xué)的分庫(kù)分表解決方案,簡(jiǎn)單理解為sharding-jdbc在.net中的實(shí)現(xiàn)并且支持更多特性和更優(yōu)秀的數(shù)據(jù)聚合,擁有原生性能的97%,并且無(wú)業(yè)務(wù)侵入性,支持未分片的所有efcore原生查詢

  • github地址 https://github.com/xuejmnet/sharding-core

  • gitee地址 https://gitee.com/dotnetchina/sharding-core

瀏覽 42
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 超碰综合| 小泬BBBBBB免费看| 噜噜噜久久久| 国产精品中文字幕在线观看| 怡春院日韩| 麻豆性爱| 中文字幕综合| 日韩欧美爱爱| 91亚洲精品久久久久久久久久久久 | 国产Av高清| AV黄色在线| 99成人在线视频| 午夜免费AV| 四川少妇BBB凸凸凸BBB安慰我| 在线观看黄色视频网站| 西西特级无码444www| 亚洲欧美日韩一区| 18禁av在线| 欧美日韩一区二区三区四区| 人妻18无码人伦一区二区三区精品| 国产成人A∨| 黄色电影免费网站| 国产精品不卡| 人人草人人干| 超碰麻豆| 午夜av影院| 婷婷久月| 69AV无码| 青榴社区| 国产TS变态重口人妖| 五十路老国产| 天天舔天天射| 黄色小说在线看| 五月丁香婷婷激情综合| 女生操网站| 91麻豆精品A片国产在线观看| 国产777| 精品国产乱子伦一区二区三区最新章 | 免费操逼| 在线无码免费| 亚洲热视频| 囯产精品久久久久久久久久| 亚洲精品成人无码毛片| 欧美一级A片免费看| 超碰性爱| 成人区人妻精品一| 一级a免一级a做免费线看内祥| 亚洲www视频| 国产精品999999| 96精品| 色就色欧美| 亚洲天堂视频网| 黄色毛片av| 親子亂子倫XXXX| 午夜精品18码视频国产17c| 日韩毛片| 国产黄色视频在线观看| 男人色天堂| 秋霞午夜成人无码精品| 亚洲人妻中文字幕| 成人黄色毛片| 亚洲vs无码秘蜜桃少妇| 久久无码精品| www.干| 国产无码激情| 九九无码视频| 日逼大片| A片视频在线观看| 欧美乱码| 91绿帽人妻-ThePorn| 国产欧美综合视频| 中文字幕免费高清在线观看| 图片区小说区区亚洲五月| 亚洲精品国产成人综合久久久久久久久 | 国产区欧美去区在线| a√天堂中文在线8| 人人摸人人操人人射| 成人AV一区二区三区| 久久熟女| 91香蕉视频免费在线观看| 欧亚免费视频| 色婷婷18禁| 欧美日韩成人片| 久草手机视频在线观看| 亚洲午夜精品视频| 日本视频一区二区三区| 制服丝袜大香蕉| 亚洲精品一区二区三| 青青伊人久久| 欧美成人三区性价比| 成人乱无码AV在线观看| 精品自拍视频| 国产久久久久久| 狠久久| 亚洲成人免费视频| www.亚洲无码| 五月天婷婷在线无码| 日韩视频一二三| AV国产在线观看| 中文字幕在线无码| 亚洲免费性爱视频| 北条麻妃网址| 91免费国产视频| 精品一区二区三区四区视频| 影音先锋资源站| 99热这里只有精品1| 日本黄色视频网址| 久草加勒比| 欧美视频在线一区| 日韩成人网址| 韩国精品无码一区二区三区18| 亚州精品人妻一二三区| h片在线观看免费| 天天日天天干天天干| 色aV牛牛在线观看| 狠狠操网| 亚洲A∨| www.亚洲成人| 97碰碰碰| 国产精品九九| 伊人大香蕉在线观看| 蜜桃精品视频| www久久久| 先锋影音资源站| 白洁91视频| 狼友初视频在线观看| 综合色国产精品欧美在线观看| 超碰黄片| 91欧美黑人| 亚洲性爱小说| 日本黄色直播| 国产精品一卡二卡三卡| 欧美乱伦视频| 国产97在线视频| 五月丁香色色网| 国产女人视频| 草逼毛片| 五月花在线视频| 丝瓜视频污APP| 日韩精品成人专区无码| 逼逼AV网站-日韩电影| 欧洲尤物不卡播放六区| 久草在线| 影音先锋亚洲无码| 伊人网在线视频观看| 中文字幕在线视频免费观看| 91丝袜在线| 白嫩外女BBWBBWBBW| 大香蕉草久| 自拍无码视频| a在线免费观看| 免费黄色视频网址| 加勒比综合网| 91丨精品丨国产丨丝袜| 国产传媒视频| 996精品视频| 国产高清无码免费在线观看| 久久无码在线观看| 北条麻妃被躁57分钟视频在线| 超碰97在线精品国产| 国产18禁网站| 中文在线一区| 亚洲无码专区在线观看| 91色色色| 日韩人妻无码一区二区三区中文| 中文字幕一二三| 日韩精品毛片| 一道本无码在线播放| 2018天天干天天操| 日本免费爱爱视频| 青吴乐大香蕉| 欧一美一婬一伦一区二区三区 | 亚洲无码影音先锋| 肉片无遮挡一区二区三区免费观看视频| 精品中文一区二区三区| 日韩免费高清无码视频| www.黄色电影| 欧美精品一二三区| 成人自拍视频| 国产在线内射| 毛片动态图| 青草视频在线免费观看| 久久久久久AV| 骚小姨子无码| 91人人妻人人做人人爽| 久久国产乱子伦精品免费午夜... 国产毛片精品一区二区色欲黄A片 | 丁香五月网| 五月天色色小说| 亚洲热在线| 91视频在线观看18| 午夜一区二区三区免费| 国产无遮挡又黄又爽又色视频 | 五月天中文字幕| 欧美美女视频网站| 国产精品午夜在线| 中文字幕丰满熟妇人妻| 79色色| 日韩精品| 天天拍天天日| 俺来射| 国产午夜在线观看| 亚洲成人视频在线观看| 激情五月天av| 国产学生妹| 午夜无码人妻AV| 亚洲无码门| 91精品91久久久中77777 | 91大神免费在线观看| 操逼网123首页| av无码免费| 一级黄色电影网| 一见钟情的韩国电影| 国产乱子伦一区二区三区视频| 各种BBwBBwBBwBBw| 超碰人人射| 中文午夜福利| 成人免费爱爱视频| 操在线视频| 久久久天堂| 亚洲v欧美v| 亚洲男同Gay一区二区| 无码成人AV| 狠狠躁日日躁夜夜躁A片无码视频 强伦轩一区二区三区四区播放方式 | 欧美视频自拍| 亚洲熟妇视频| 国产人妖视频| 欧美成人福利视频| 日本做爱视频| 国产成人精品三级麻豆| 亚洲性爱片| 日本一级特级毛片视频| 亚洲专区在线| 天天日天天干天天操| 亚洲黄色激情| 91探花秘在线播放偷拍| 西西人体444大胆高清张悠雨| 精品国产一二三| 中文字幕在线一区二区a| 日韩一级在线播放| 香蕉av在线观看| 日韩精品无码一区二区三区| 久草大| 久久久一区二区三区四区免费听 | 青操在线| 亚洲操色| 图片区视频区小说区| 日本高清视频网站| 91亚洲精品国偷拍自产在线观看 | 欧美性猛交XXXX乱大交3| 竹菊影视一区二区三区| 国内精品久久久久久久久98| 国产三级91| 亚洲精品性爱| 强伦轩一区二区三区在线观看| www.一区二区三区| 亚洲无码激情在线| 筱田步美| 黄网免费在线观看| 国产伦子伦一级A片免费看老牛 | 国产免费黄色视频网站| 性无码一区二区三区在线观看| 国产无码久久| 蜜桃在线无码| 男人天堂视频在线观看| 操碰在线视频| 久久青草免费视频| 五十路AV| 亚洲乱码国产乱码精品天美传媒| 国內精品久久久久久久| 亚洲第一天堂| 人人人妻人人人操| 成人A片免费视频| 2025精品偷拍视频| 亚洲美女网站免费观看网址| 手机看片1204| 性欧美成人播放77777| 黄色视频免费在线观看网站| 久久成人片| 西西4444www大胆无吗| 人人操人人搞| 综合一区二区| 成av人片一区二区三区久久| 一区二区视频在线观看| 东京热无码高清| 北京熟妇搡BBBB搡BBBB| 99无码秘蜜桃人妻一区二区三区| 草草操| 无码av中文字幕| 女人特级毛片18| 色色色色综合| 91视频一区二区| 蜜桃免费网站| 亚洲国产成人电影| 人人操人人干人人操| 一级欧美黑人大战白妞| 色婷婷成人做爰A片免费看网站| 日日干网| 一区二区三区成人电影| 特猛特黄AAAAAA片| 五月婷婷丁香在线| 日欧美美女逼| 欧美熟妇一区二区三区| 狠狠操狠狠| 日韩在线视频第一页| 另类小说五月天| 人人爽网站| 亚洲无码一二三| 日日夜夜老司机| 波多野结衣一二三区| 99在线免费观看| 午夜久| 伊人激情五月天| 国产一级黄色A片| 嫩草视频在线观看| 午夜国产精品AV| 翔田千里在线播放| 污网站在线观看| 国产口爆视频| 色欲av在线| 黄色视频网站在线播放| 欧美日韩中文字幕在线| 91老熟| 中文字幕+乱码+中文乱码电影| 亚洲成人中文字幕在线| 日韩熟妇无码中文字慕| 日本一节片在线播放| 一区二区三区网站| 国产黄色一级片| 成人美女视频| 国产三级黄色视频| 亚洲AV成人无码精品区| www.超碰| www.豆花福利视频| 99视频网站| 亚洲天堂在线观看免费视频| 欧美在线不卡| 人人操人人模| 97毛片| 亚洲综合激情网| www.亚洲天堂| 91黑人丨人妻丨国产丨| 天天日天天爽| 青青青青青操| 欧美福利视频| 免费操B| 久久精品一区| 日韩少妇无码视频| 91自摸| 欧美日韩免费在线| 天天都色| 东京热黄色| 五月色综合网| 97精品视频在线观看| 欧美韩日| 黄色A片免费看| 天天摸天天肏| 高清无码自拍| 日本成人黄色| 成人欧美大片黄18| 久久久永久免费视频| 最新超碰| 亚洲在线资源| 天堂一区二区| 在线99热| 日本久久久久久久久视频在线观看| 青草久久视频| av不卡免费观看| 人妻av中文字幕| 一道本视频在线免费观看| 欧美一级A片免费看| 三级99| 国产成人免费在线| 日韩国产免费| 精品蜜桃一区二区三区| 日韩在线成人视频| 美女黄色视频永费在线观看网站| 91在线成人| 特级特黄A级高潮播放| 人人上人人干| 人人爱久久| 日韩欧美色图| 隸則av| 天天操操| 亚洲视频黄色| 国产人妻精品一区二区三区不卡| 国产色在线| www.午夜福利| 日本a在线| 免费在线观看无码视频| 蜜桃av秘无码一区二区三| 免费A网站| 天天拍夜夜爽| 丁香五月天视频| 无套内射无码| 91在线视频观看| 亚洲国产熟妇无码日韩| 国产成人A∨| 影音先锋成人av| 日韩视频免费观看高清完整版在线观 | 欧美三级在线观看视频| 大香蕉亚洲成人| 操BBBB| 欧美成人综合| 日韩欧美大片在线观看| 最新中文字幕777私人在线| 337P粉嫩大胆噜噜噜55569| 国产乱子伦日B视频| 青娱乐精品在线| 免费AV成人| 国产精品婷婷午夜在线观看| 无码日逼视频| 一级色情片| 色情五月婷婷| 91免费网站| 美女靠逼视频| 精品无码一区二区三区四区久久久软件 | 999热这里只有精品| 国产AⅤ爽aV久久久久成人| 无码逼逼| 黄色成人视频在线观看| 山西真实国产乱子伦| 亚洲综合免费观看高清完整| 久久精品一区二区三区蜜芽的特点| 夜色精品视频| 免费人妻视频| www俺来也com| 欧美黄片AAA| 无码av免费精品一区二区三区| 大香蕉中文视频| 国产午夜视频在线观看| 成人免费三级| 久久久www| 人妻人人操人人爽| 久久超碰99| 日韩三级视频| 不卡不在线中文| 日本免费一二三区| 亚洲欧洲免费视频| 黑人一区二区| 久久久久久亚洲精品| 欧美亚洲激情| 国产成人无码精品一区秘二区 | 国产午夜福利视频| 国产第8页| 日本一级黄色电影网| 超碰人人操人人爱| 羽月希奶水饱胀在线播放| 久久欧洲成人精品无码区| 壁特壁视频在线观看| 精品久久免费一区二区三区| 欧美视频在线观看| 欧美高清无码视频| 亚洲AV永久无码国产精品久久| 国内自拍偷拍| 日韩高清无码三级片| 中文字幕无码A片久久| 国产在线秘麻豆精品观看| 精品人妻一区二区三区阅读全文| 国产g蝌蚪| 大香蕉性爱视频| 嫩小槡BBBB槡BBBB槡免费-百度| 日韩免费在线观看一区入口| 午夜看黄片| 看免费黄色视频| 三上悠亚一区二区| 三级在线视频| av无码一区二区| 3D精品啪啪一区二区免费| 特级无码| 玖玖爱免费视频| 狠狠操夜夜操| 亚洲无码视频观看| 国产成人视频免费| AV国产高清| 黄色视频免费看| 台湾成人综合网| 男人天堂视频在线| 成人国产欧美日韩在线视频| 一级A黄色片| 天堂久久久久| 无码精品人妻一区二区欧美| 国产成人精品免费视频| 欧美人妻日韩精品| 亚洲日本中文字幕在线观看| 欧美一区二区三区在线| 欧美A在线| 成人自拍视频在线| 波多野结衣无码流出| 狠狠躁日日躁夜夜躁A片无码| 91网站在线播放| 日逼操| 一道本在线观看| 青草福利在线| www.豆花社区成人| 久久永久免费精品人妻专区 | 青青青草视频在线| 超碰青青青| 91麻豆免费看| 婷婷中文字幕| 日韩精品在线观看免费| 91精品少妇高潮一区二区三区不卡| 老女人操逼| 国产理论电影在线观看| 影音先锋男人资源网| 99久久国产视频| 日本黄色A片| 无码av免费精品一区二区三区| 免费看的操逼视频| 狠狠撸狠狠撸| 91你懂的| 免费无码婬片AAAA片直播| 黄色录像毛片| 亚洲三级精品| 狼友在线视频| 97狠狠| 日韩区在线| 国产黄色电影在线| 苍井空亚洲精品AA片在线播放| 亚洲自拍电影| 波多野结衣一级婬片A片免费下载 囯产精品久久久久久久久免费无码 | 一卡二卡在线视频| 日本欧美操| 亚洲精品免费观看| 国产69页| 伊人影院99| 69AV视频网站| 国产精品一区二区三区四区| 日韩免费无码视频| 国产一级a毛一级a毛视频在线网站) | 亚洲成a| 草逼综合网| 亚洲无码aa| 久久久久久网站| 18禁网站禁片免费观看| 国产午夜精品一区二区三区牛牛| 影音先锋女人aV鲁色资源网站| 无码视频播放| 亚洲天堂无码在线观看| 激情五月天导航| 国产精品久久久久久99| 午夜大黄片| 国产三级黄色视频| 毛片视频免费观看| 久久黄色小视频| 综合伊人大香蕉| 大黑逼AV| 免费一区二区三区| 日韩动态图| 69成人免费视频| 欧美一本在线| 亚洲精品aaa| 成人A电影| 日本人妻A片成人免费看片| 内射极品美女| 波多野结衣日韩| 91人妻人人澡人人添人人爽| 亚洲欧美91| 欧美日p| 免费成人黄色| 亚洲av高清无码| 午夜精品视频在线观看| 青青久热| 亚洲精品美女视频| 黄色录像一级带| 欧美成人A片在线观看| 69视频网| 人人操人人干人人爽| 日韩视频网址| 日韩免费视频一区| a片免费网址| 秋霞日韩| 亚洲精品无码在线观看| 亚洲无码动漫| 天天干天天日天天| 精品亚洲无码视频| 人妻天天爽夜夜爽| 福利在线看| 夜夜夜操操操| 黑人干亚洲人| 精品福利导航| 东京热这里只有精品| 高潮无码视频| 北条麻妃在线一区| 奇米色婷婷| 中文字幕成人影片| 日韩三区在线| 先锋影音男人| 色999在线播放视频| 日韩91| 爱爱一区| 七十路の高齢熟妇无码| 无码视频韩国| 中文在线观看免费视频| 午夜免费网站| 欧洲无码精品| 亚洲日韩国产中文字幕| 中字无码AV| 大鸡巴午夜爽视频电影| 天天日天天草| 强伦轩人妻一区二区电影| 亚洲无码制服| 可以在线观看的av| 波多野结衣亚洲视频| 婷婷欧美日韩| 啪啪免费网| 老女人肏屄视频| 国产免费国产| 国产精品久久久91| 激情性爱婷婷色五月| 国产视频福利| 高清无码视频网站| 瑟瑟视频在线观看| 人人妻人人爽人人精品| 日本熟妇一区二区三区| 天天操天天操天天| 久久久久成人精品无码| 日日操日日摸| 日韩码波多野结衣| 一级特黄毛片| 一级a免费| 国产精品高清网站| 伊人久久久影视大全| 综合玖玖| 大香蕉网站在线观看| 亚洲中文字幕在线观看视频网站| 青青草av| 香蕉成人网| 淫色视频| 亚洲69| 毛片网站在线| 在线看黄片| 无码视频网| 日韩肏逼| 操逼视频无码| 91精品国产麻豆国产自产在线| 做爰视频毛片蜜桃| 黄色小说视频网站| 91精品在线免费观看| 西西人体44www大胆无码| 午夜天堂精品久久久久9| 天天舔天天干| 新中文字幕| 亚洲专区区免费| 中文字幕成人影片| 欧美综合自拍| 亚洲91成人| 福利导航视频| 中文字幕无码影院| 中文字幕精品视频在线| 在线观看日本黄| 国产系列精品AV| 久久久久亚洲精品| 丁香婷婷社区| 欧美一级特黄真人做受| 蜜臀无码在线| 特黄色A级片视频| 亚洲综合中文字幕在线播放| 亚洲日本中文字幕在线观看| 中文字幕日韩乱伦| 亚洲天堂高清无码| 大香蕉综合伊人| 亚洲视频精选| 一级黄片在线| 一本久久综合亚洲鲁鲁五月天| 梁祝艳谭A级毛片| 亚洲av资源在线观看| 国产乱色精品成人免费视频| 操逼网123首页| 久久精品视频免费看| www.毛片| www.豆花社区成人| 激情无码在线观看| 尤物视频在线观看视频| 337P粉嫩大胆噜噜噜55569| 欧美熟妇搡BBBB搡BBBBB| 91av一区| 欧美熟妇BBB搡BBB| 99精品免费在线观看| 91精品国产乱码香蕉黄瓜草莓| 国产黄色视屏| 国产秘精品一区二区三区免费 | 国产日逼网站| 999国产视频| 91热热| 高清AV在线| 成人无码区免费| 中文在线观看视频| 91亚洲视频在线观看| 亚洲无码视频免费看| 蜜桃精品视频| 亚洲成人黄色电影| 婷婷色色婷婷五月天| 无码成人视频| 婷婷五月天在线电影| 五月丁香在线播放| 人人妻人人澡人人DⅤD| 久久久久无码国产精品一区| 国产午夜精品一区二区三区四区| 大香蕉综合网站| 欧美日韩亚洲一区二区| 在线免费看黄网站| 国产一级婬乱片AV片AAA毛片| 91久久综合| 91精品大屁股白浆自慰久久久| 97激情| 色五月婷婷中文字幕| 亚洲AV成人片无码网站| 中文字幕无码视频| 北条麻妃无码精品AV怎么看 | 欧美老女人性| 亚洲日韩欧美一厂二区入| 亚洲色无码| 久久99人妻无码精品一区| 人人操人人干人人爽| 国产无码成人免费| 日韩高清一区| 亚洲黄色电影在线观看| 天堂成人在线视频| 亚洲视频欧洲视频| 人人上人人操| 国产AⅤ无码一区二区| 国产毛片久久久久久久| 日本黄色录像| 亚洲国产三级片| a免费视频| 看操逼视频| 夫妻成人免费看片一区二区| 国产美女操逼网站| av在线观看网站| 国产一区久久| 国产性爱自拍视频| 91AV成人| 国产理论电影在线观看| 成人网站视频在线观看| 五月天黄色电影| 九九视屏| 日本成人黄色| 欧美综合自拍| 手机看片1024国产| 伊人影院在线视频| 色五月综合| 天天色视频| 午夜午夜福利理论片在线播放| 91成人免费在线观看| 免费视频亚洲| 91成人视频在线免费观看| 很很干在线视频| AV三级片在线观看| 精品人妻少妇| 一级黄色视频日逼片| 人人操天天| TheAV精尽人亡av| 亚洲黄色电影网| 日韩AV片| 欧美人与禽乱婬A片| 精品福利导航| 四季AV一区二区凹凸懂色桃花| 久福利| 久久久精品网站| 思思热在线观看视频| 欧美成人大香蕉| 欧美视频一区二区三区| 天天色网站| 躁BBB躁BBB躁BBBBBB日视频| 我爱大香蕉| 91丨九色丨熟女丰满| 日本激情网| 亚洲综合激情五月久久| 这里视频很精彩免费观看电视剧最新 | 免费观看黄色成人网站| 丁香五月天激情视频| 人人妻人人要| 日韩熟妇无码中文字幕| 东京热高清无码| 黑人干亚洲人| 嫩草国产在线| 国产成人AV免费无码| 热久久精品| 51成人网站免费| 丰满人妻一区二区免费看| 日本免费在线观看视频| 91精彩视频在线观看| 日韩黄色视频网站| 国产色AV| 麻豆传媒猫爪| 四川BBB操BBB| 少妇AV| 亚洲视频免费在线| 黄色三级片网站| 国产一区二区久久| 九久久| 国产第56页| 日韩高清一区二区| 成人一区二区三区| 国产成人精品一区二区三区四区| 成功精品影院| 亚洲成人AV在线播放| 狠狠干狠狠草| 亚欧成人在线视频| 丰满人妻-区二区三区| 亚洲va在线| 逼网站| 日逼片A| 日本日逼网| 人妻天天操| 神马久久午夜| 玩弄大乳乳妾高潮乳喷视频| 尤物视频入口| 国外成人性视频免费| 欧美日韩高清无码| 中文字幕在线观看第一页| 亚洲精品日日夜夜| 九九人妻| 久久久久免费| 插菊花综合网1| 级婬片AAAAAAA免费| 91亚洲精品国偷拍自产在线观看 | 婷婷国产AV| 亚洲日韩成人| 六月天av| 亚洲AV成人无码一区二区三区 | 先锋影音中文字幕| 91精品国产欧美一区二区成人| 精品黄色毛片| 十八禁网站在线播放| 九九精品在线观看| 五月久久婷婷| 亚洲高潮| 大学生一级特黄大片| 亚洲AV电影网| 空姐白洁| 国产婬片lA片www777| 日本A片免费观看| 无码av网站| 怡春院日韩| 天干天干天夜夜| 成人视频无码| 亚洲精品乱码久久久久久按摩观| 啪啪啪AV| 国产亚洲欧美精品综合在线| 综合天堂AV久久久久久久| 五月激情黄色| 性爱小说视频| 国产黄色视频在线免费观看| 亚洲第一区欧美日韩| 国产伦精品一级A片视频夜夜| 看一级黄色片| 午夜成人福利电影| 亚洲国产精品18久久久久久| 亚洲男人的天堂视频网在线观看+720P | 一区二区在线不卡| 三级爱爱| 中文在线高清字幕| 一区二区三区免费| 强行征服邻居人妻HD高清日本| 国产9熟妇视频网站| 天天做天天爱天天高潮| 狠狠色噜噜狠狠狠7777米奇网 | 97人人爽人人爽人人人| 性做久久久久久久久| AV第一福利大全导航| 另类小说五月天| 国产欧美一区二区人妻喷水| 色播国产成人AV| 免费无人区一码二码乱码怎么办 | 性爱视频免费| 黄色操逼网站| 又大又粗AV| 91精品电影| 黄片网站免费观看| 日韩porn| 麻豆高清无码| 国产免费黄色视频| 黄色操B视频| 日韩小视频在线观看| 中文字幕三级片在线观看| 豆花视频免费| 色五月网| 8050午夜一级免费| A片国产| 日韩精品成人无码| 色婷婷官网| 婷婷久久综合久| 亚洲最大黄色| 成人才看的在线视频| 成人无码区免费A片在线软件| 国产在线小视频| 无码国产99精品久久久久网站| 在线天堂AV| 天堂无线av无码av| 好逼天天有| 在线h片| 亚洲一级av无码毛片精品| 丝袜一区二区三区| 欧美丰满人妻免费视频人| 91.射| 中文字幕免费高清网站| 成人做爰100片免费看| 丰满人妻一区二区三区四区不卡| 中文字幕免费高清在线观看|