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编辑  收藏  举报

导航