diff --git a/labs/CockRoachDBEntityFrameworkCoreTest/.gitignore b/labs/CockRoachDBEntityFrameworkCoreTest/.gitignore
new file mode 100644
index 00000000..11ee0d93
--- /dev/null
+++ b/labs/CockRoachDBEntityFrameworkCoreTest/.gitignore
@@ -0,0 +1,19 @@
+*.bak
+*.suo
+*.db
+*.db-shm
+*.db-wal
+*.user
+.vs
+obj
+Obj
+bin
+Bin
+debug
+Debug
+release
+Release
+Logs
+logs
+node_modules
+cockroach-data
\ No newline at end of file
diff --git a/labs/CockRoachDBEntityFrameworkCoreTest/CockRoachDBEntityFrameworkCoreTest.csproj b/labs/CockRoachDBEntityFrameworkCoreTest/CockRoachDBEntityFrameworkCoreTest.csproj
new file mode 100644
index 00000000..eff00d35
--- /dev/null
+++ b/labs/CockRoachDBEntityFrameworkCoreTest/CockRoachDBEntityFrameworkCoreTest.csproj
@@ -0,0 +1,18 @@
+
+
+
+ Exe
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
diff --git a/labs/CockRoachDBEntityFrameworkCoreTest/CockRoachDBEntityFrameworkCoreTest.sln b/labs/CockRoachDBEntityFrameworkCoreTest/CockRoachDBEntityFrameworkCoreTest.sln
new file mode 100644
index 00000000..68a4cb46
--- /dev/null
+++ b/labs/CockRoachDBEntityFrameworkCoreTest/CockRoachDBEntityFrameworkCoreTest.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30011.22
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CockRoachDBEntityFrameworkCoreTest", "CockRoachDBEntityFrameworkCoreTest.csproj", "{B0398F26-9A0E-4893-9876-5FDAB34C35FD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B0398F26-9A0E-4893-9876-5FDAB34C35FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0398F26-9A0E-4893-9876-5FDAB34C35FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B0398F26-9A0E-4893-9876-5FDAB34C35FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0398F26-9A0E-4893-9876-5FDAB34C35FD}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {3CB604C6-1B7A-4908-AA58-DAD9A7ED6084}
+ EndGlobalSection
+EndGlobal
diff --git a/labs/CockRoachDBEntityFrameworkCoreTest/MyDbContext.cs b/labs/CockRoachDBEntityFrameworkCoreTest/MyDbContext.cs
new file mode 100644
index 00000000..04755fc2
--- /dev/null
+++ b/labs/CockRoachDBEntityFrameworkCoreTest/MyDbContext.cs
@@ -0,0 +1,20 @@
+using Microsoft.EntityFrameworkCore;
+using System.Security.Cryptography.X509Certificates;
+
+namespace CockRoachDBEntityFrameworkCoreTest
+{
+ public class MyDbContext : DbContext
+ {
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ //数据库名只能为小写,否则报错为:database "postgres" does not exist
+ optionsBuilder.UseNpgsql("User ID=root;Host=localhost;Port=26257;Database=mytest;CommandTimeout=120;SslMode=Require;TrustServerCertificate=true;",
+ o => o.ProvideClientCertificatesCallback(o => o.Add(new X509Certificate2("client.root.pk12"))));
+ }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ modelBuilder.Entity();
+ }
+ }
+}
\ No newline at end of file
diff --git a/labs/CockRoachDBEntityFrameworkCoreTest/Program.cs b/labs/CockRoachDBEntityFrameworkCoreTest/Program.cs
new file mode 100644
index 00000000..d7a5e3fa
--- /dev/null
+++ b/labs/CockRoachDBEntityFrameworkCoreTest/Program.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Linq;
+
+namespace CockRoachDBEntityFrameworkCoreTest
+{
+ public class Program
+ {
+ private static void Main(string[] args)
+ {
+ using var db = new MyDbContext();
+ if (db.Database.EnsureCreated())
+ {
+ db.Set().Add(new User { Name = "admin" });
+ db.SaveChanges();
+ }
+ Console.WriteLine(db.Set().Count());
+ }
+ }
+}
\ No newline at end of file
diff --git a/labs/CockRoachDBEntityFrameworkCoreTest/README.md b/labs/CockRoachDBEntityFrameworkCoreTest/README.md
new file mode 100644
index 00000000..affb7fdb
--- /dev/null
+++ b/labs/CockRoachDBEntityFrameworkCoreTest/README.md
@@ -0,0 +1,10 @@
+文档地址:http://doc.cockroachchina.baidu.com/
+
+生成安全证书&启动节点:http://doc.cockroachchina.baidu.com/#quick-start/start-a-local-cluster/from-binary/
+
+生成pk12文件:openssl pkcs12 -export -password pass: -in client.root.crt -inkey client.root.key -out client.root.pk12
+
+命令行创建数据库:
+cockroach sql --certs-dir certs
+>create database MyTest;
+>\q
\ No newline at end of file
diff --git a/labs/CockRoachDBEntityFrameworkCoreTest/User.cs b/labs/CockRoachDBEntityFrameworkCoreTest/User.cs
new file mode 100644
index 00000000..fd8f220c
--- /dev/null
+++ b/labs/CockRoachDBEntityFrameworkCoreTest/User.cs
@@ -0,0 +1,15 @@
+using System;
+
+namespace CockRoachDBEntityFrameworkCoreTest
+{
+ public class User
+ {
+ public User()
+ {
+ this.Id = Guid.NewGuid();
+ }
+
+ public Guid Id { get; set; }
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/labs/CockRoachDBEntityFrameworkCoreTest/client.root.pk12 b/labs/CockRoachDBEntityFrameworkCoreTest/client.root.pk12
new file mode 100644
index 00000000..3d5a00f0
Binary files /dev/null and b/labs/CockRoachDBEntityFrameworkCoreTest/client.root.pk12 differ
diff --git a/tools/Win64OpenSSL-1_1_0i.exe b/tools/Win64OpenSSL-1_1_0i.exe
new file mode 100644
index 00000000..2a039b41
Binary files /dev/null and b/tools/Win64OpenSSL-1_1_0i.exe differ
diff --git a/tools/cockroach-v2.0.5.windows-6.2-amd64/certs/client.root.pk12 b/tools/cockroach-v2.0.5.windows-6.2-amd64/certs/client.root.pk12
new file mode 100644
index 00000000..3d5a00f0
Binary files /dev/null and b/tools/cockroach-v2.0.5.windows-6.2-amd64/certs/client.root.pk12 differ