EFCore实践测试二
using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Configuration; using System.Text; namespace EFStudy { public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } public DbSet<Person> Persons { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString); optionsBuilder.UseSqlServer("Data Source = .;Initial Catalog = Test;User Id = sa;Password = 123456;"); } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public int? Rating { get; set; } public Person Person { get; set; } public List<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int Rating { get; set; } //public int BlogId { get; set; } public Blog Blog { get; set; } public Person Author { get; set; } } #region 深入1 public class Person { public int PersonId { get; set; } public string Name { get; set; } public List<Post> AuthoredPosts { get; set; } public List<Blog> OwnedBlogs { get; set; } } #endregion #region 深入2 public DbSet<People> Peoples { get; set; } public DbSet<School> Schools { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // modelBuilder.Entity<School>().HasMany(s => s.Students).WithOne(s => s.School); } public class People { public int Id { get; set; } public string Name { get; set; } } public class Student : People { public School School { get; set; } } public class School { public int Id { get; set; } public string Name { get; set; } public List<Student> Students { get; set; } } #endregion } }
using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using static EFStudy.BloggingContext; namespace EFStudy { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); //test(); //addpots(); //addperson(); //test1(); //test2(); //addData3(); //test3(); //test4(); test5(); Console.ReadLine(); } #region 添加基础数据 static void test() { using (var db = new BloggingContext()) { Console.WriteLine("----------------test-----------------"); db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" }); db.Blogs.Add(new Blog { Url = "http://blogs.cddn.com" }); db.Blogs.Add(new Blog { Url = "http://blogs.xiaonei.com" }); var count = db.SaveChanges(); Console.WriteLine("{0} records saved to database", count); Console.WriteLine(); Console.WriteLine("All blogs in database:"); foreach (var blog in db.Blogs) { Console.WriteLine(" - {0}", blog.Url); } } } static void addpots() { Console.WriteLine("----------------addpots-----------------"); using (var db = new BloggingContext()) { var blog = db.Blogs.FirstOrDefault(); for (int i = 0; i < 10; i++) { db.Posts.Add(new Post { Content = "Posts" + i, Title = "nihao" + i, Blog = blog }); } var count = db.SaveChanges(); Console.WriteLine("{0} records saved to database", count); } } static void addperson() { Console.WriteLine("----------------addperson-----------------"); using (var db = new BloggingContext()) { var pot = db.Posts.ToList(); var blog = db.Blogs.FirstOrDefault(); var listBlog = new List<Blog>(); listBlog.Add(blog); for (int i = 0; i < 10; i++) { db.Persons.Add(new Person { AuthoredPosts = pot, Name = "wang", OwnedBlogs = listBlog }); } var count = db.SaveChanges(); Console.WriteLine("{0} records saved to database", count); } } #endregion #region Include查询 static void test1() { Console.WriteLine("----------------test1 TEST Include-----------------"); using (var context = new BloggingContext()) { var blogs = context.Blogs.Include(blog => blog.Posts).ToList(); foreach (var blog in blogs) { Console.WriteLine($"博客id{blog.BlogId}"); foreach (var item in blog.Posts) { Console.WriteLine($" 该所包含文章{item.Title}"); } Console.WriteLine("----------------"); } } } #endregion #region 深入1 static void test2() { //方式1 Console.WriteLine("----------------test1 TEST Include-----------------"); using (var context = new BloggingContext()) { var blogs = context.Blogs.Include(blog => blog.Posts).Include(blog => blog.Person).ToList(); foreach (var blog in blogs) { Console.WriteLine($"博客id{blog.BlogId}"); foreach (var item in blog.Posts) { Console.WriteLine($" 该所包含文章{item.Title}-作者{item.Author.Name}"); } Console.WriteLine("----------------"); } //方式2 虽然也是一样结果不过意义不一样,更深入的一层 var blogs2 = context.Blogs. Include(blog => blog.Posts). ThenInclude(post => post.Author).ToList(); } } #endregion #region 深入2 static void addData3() { School school = new School() { Name = "苏州中学" }; List<Student> listStu = new List<Student>(); for (int i = 0; i < 10; i++) { listStu.Add(new Student() { Name = $"yuan{ i}", School = school }); } using (var context = new BloggingContext()) { var entity = context.Schools.Add(school); context.Peoples.AddRange(listStu); var count = context.SaveChanges(); Console.WriteLine("{0} records saved to database", count); } } static void test3() { //方式1 Console.WriteLine("----------------test3 -----------------"); using (var context = new BloggingContext()) { //所有人员(可以使用许多模式预先加载的学生)的 School 导航的内容,断点是可以看到的,但是点不出来school dynamic list = context.Peoples.Include(person => ((Student)person).School).ToList(); //context.People.Include(person => (person as Student).School).ToList() foreach (var item in list) { Console.WriteLine($"{item.Name}所在学校{item.School.Name}"); Console.WriteLine("----------------"); } } } static void test4() { Console.WriteLine("----------------test4 -----------------"); using (var context = new BloggingContext()) { var blogs = context.Blogs. Include(blog => blog.Posts). Select(blog => new { Id = blog.BlogId, Url = blog.Url }).ToList(); foreach (var item in blogs) { Console.WriteLine($"{item.Url}"); Console.WriteLine("----------------"); } } } //显示加载 可以逐步填充内置的属性 static void test5() { Console.WriteLine("----------------test5 -----------------"); using (var context = new BloggingContext()) { var blog = context.Blogs.Single(b => b.BlogId == 2); context.Entry(blog).Collection(b => b.Posts).Load();//会填充Posts context.Entry(blog).Reference(b => b.Person).Load();//会填充Person } using (var context = new BloggingContext()) { var blog = context.Blogs.Single(b => b.BlogId == 1); var goodPosts = context.Entry(blog) .Collection(b => b.Posts) .Query() .Where(p => p.Rating > 3) .ToList(); } } //延迟加载 //使用延迟加载的最简单方式是通过安装 Microsoft.EntityFrameworkCore.Proxies 包,并通过调用 UseLazyLoadingProxies 来启用该包 //MVC中protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder .UseLazyLoadingProxies() .UseSqlServer(myConnectionString); #endregion } }
posted on 2020-02-16 17:22 HOT SUMMER 阅读(244) 评论(0) 编辑 收藏 举报