首先创建一个.net core控制台程序,添加实体类
实体类:Employee
using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; namespace TreeEntityDemo { /// <summary> /// 员工实体 /// </summary> public class Employee { public int Id { get; set; } public string Name { get; set; } [ForeignKey(nameof(ManagerId))] public int? ManagerId { get; set; } public virtual Employee Manager { get; set; } public virtual ICollection<Employee> Employees { get; set; } } }
定义DbContext
using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using System.IO; namespace TreeEntityDemo { public class AppDbContext:DbContext { public AppDbContext() { } public AppDbContext(DbContextOptions<AppDbContext> options):base(options) { } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Employee>() .HasMany(x => x.Employees) .WithOne(x => x.Manager) .HasForeignKey(x => x.ManagerId) .OnDelete(DeleteBehavior.ClientSetNull); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); var config = builder.Build(); optionsBuilder.UseSqlServer(config.GetConnectionString("TreeDemoDb")); } } }
配置数据库链接:appsettings.json
{ "ConnectionStrings": { "TreeDemoDb": "Server=(localdb)\\MSSQLLocalDB;Database=TreeDemoDb;Trusted_Connection=True;MultipleActiveResultSets=true" } }
添加数据库迁移 Add-Migration
add-migration InitialCreate
在Program.cs中测试
using Microsoft.EntityFrameworkCore; using System; using System.Linq; namespace TreeEntityDemo { class Program { static void Main(string[] args) { using (var context = new AppDbContext()) { context.Database.EnsureCreated(); if (!context.Employees.Any()) { context.Employees.AddRange( new Employee() { Name = "Manager1" }, new Employee() { Name = "Employee1" }, new Employee() { Name = "Employee2" }, new Employee() { Name = "Employee3" } ); } context.SaveChanges(); } //GetParent(); SetParent(); GetChildren(); Console.WriteLine("Done!"); } public static void Find() { using (var context = new AppDbContext()) { var employees = context.Employees.FirstOrDefault(t => t.Name == "Employee1"); Console.WriteLine(employees.Name); Console.WriteLine(employees.Manager.Name); } } /// <summary> /// 删除所有 /// </summary> static void RemoveAll() { using (var context = new AppDbContext()) { var employees = context.Employees .Where(t => !string.IsNullOrEmpty(t.Name)); context.RemoveRange(employees); context.SaveChanges(); } } /// <summary> /// 获取父类 /// </summary> static void SetParent() { using (var context = new AppDbContext()) { var employee1 = context.Employees.FirstOrDefault(t => t.Name == "Employee1"); var employee2 = context.Employees.FirstOrDefault(t => t.Name == "Employee2"); var employee3 = context.Employees.FirstOrDefault(t => t.Name == "Employee3"); var manager1 = context.Employees.FirstOrDefault(t => t.Name == "Manager1"); employee1.Manager = manager1; employee2.Manager = manager1; employee3.Manager = manager1; context.Update(employee1); context.Update(employee2); context.Update(employee3); context.SaveChanges(); } } /// <summary> /// 获取子类 /// </summary> static void GetParent() { using (var context = new AppDbContext()) { var employee1 = context.Employees.Include(t=>t.Manager).FirstOrDefault(t => t.Name == "Employee1"); if (employee1.Manager==null) { Console.WriteLine("null"); } else { Console.WriteLine(employee1.Manager.Name); } } } static void GetChildren() { using (var context = new AppDbContext()) { var manager1 = context.Employees.FirstOrDefault(t => t.Name == "Manager1"); var children = context.Employees.Where(t => t.ManagerId == manager1.Id); if (children!=null && children.Count()>0) { foreach (var item in children) { Console.WriteLine(item.Name); } } } } static void DeleteParent() { using (var context = new AppDbContext()) { var manager1 = context.Employees.FirstOrDefault(t => t.Name == "Manager1"); context.Employees.Remove(manager1); context.SaveChanges(); } } } }
来源:https://www.cnblogs.com/AlexanderZhao/p/12640506.html