• 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
    
        }
    }
  • 相关阅读:
    四则运算
    3.12----对potplayer的使用评价
    对软件工程的一点思考
    个人附加作业
    附加题
    个人最终总结
    结对编程总结
    修改后的四则运算
    阅读程序回答问题
    Visual studio 2013的安装和单元测试
  • 原文地址:https://www.cnblogs.com/wangchuang/p/12317635.html
Copyright © 2020-2023  润新知