最近在接触DDD+micro service来开发项目,因为EF Core太适合DDD模式需要的ORM设计,所以这篇博客是从代码角度去理解EF core的内部实现,希望大家能从其中学到一些心得体会去更好的写出高质量的代码。
从github 上去下载ef core仓库, 本篇代码的版本是基于tag v5.0.3的,如果大家在以后看见这篇博客,可以在分支上reset 到这个tag对照这边博客,下载完成之后,配置根目录下的global.json成本机已经安装的sdk, runtime 的版本,直接build通过就可以了。下面是代码的目录。
简单的说一下,benchmark 是用来性能测试的,solution是一些自动化部署的配置文件,src是ef core 的核心代码,test 是此项目的单元测试目录,如果你想更深入了解每个模块的实现逻辑,从单元测试出发是一个非常不错的选择。
在用户阶段我们需要做的如下,代码来自 ef 官方文档
1 using System; 2 using System.Linq; 3 4 namespace EFGetStarted 5 { 6 internal class Program 7 { 8 private static void Main() 9 { 10 using (var db = new BloggingContext()) 11 { 12 // Note: This sample requires the database to be created before running. 13 14 // Create 15 Console.WriteLine("Inserting a new blog"); 16 db.Add(new Blog { Url = "" }); 17 db.SaveChanges(); 18 19 // Read 20 Console.WriteLine("Querying for a blog"); 21 var blog = db.Blogs 22 .OrderBy(b => b.BlogId) 23 .First(); 24 25 // Update 26 Console.WriteLine("Updating the blog and adding a post"); 27 blog.Url = "https://devblogs.microsoft.com/dotnet"; 28 blog.Posts.Add( 29 new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" }); 30 db.SaveChanges(); 31 32 // Delete 33 Console.WriteLine("Delete the blog"); 34 db.Remove(blog); 35 db.SaveChanges(); 36 } 37 } 38 } 39 }