public partial class Company { //private ILazyLoader _lazyLoader = null; //public Company(ILazyLoader lazyLoader) //{ // this._lazyLoader = lazyLoader; //} //这上面是延迟加载 public int CompanyId { get; set; } public string CompanyName { get; set; } public DateTime? CreateTime { get; set; } public int CreatorId { get; set; } public int? LastModifierId { get; set; } public DateTime? LastModifyTime { get; set; } public string Description { get; set; } /// <summary> /// 导航属性 /// </summary>public virtual List<SysUser> SysUser { get; set; } //要声明为虚 sysUser 为子表 }
public partial class SysUser { public int Id { get; set; } public string Name { get; set; } public string Password { get; set; } public int Status { get; set; } public string Phone { get; set; } public string Mobile { get; set; } public string Address { get; set; } public string Email { get; set; } public long? Qq { get; set; } public string WeChat { get; set; } public int? Sex { get; set; } public DateTime? LastLoginTime { get; set; } public DateTime? CreateTime { get; set; } public int? CreateId { get; set; } public DateTime? LastModifyTime { get; set; } public int? LastModifyId { get; set; } public int? CompanyId { get; set; } /// <summary> /// 应用属性 /// </summary> public virtual Company Company { get; set; } }
{ //关于新增 using (CustomerDbContext context = new CustomerDbContext()) { Company company = new Company() { SysUser = new List<SysUser>() { new SysUser(){ LastLoginTime=DateTime.Now, LastModifyTime=DateTime.Now, CreateId=1, CreateTime=DateTime.Now, Email="", Mobile="18672713698" } }, CompanyName = "阿里的武汉公司", LastModifierId = 1, CreateTime = DateTime.Now, CreatorId = 1, LastModifyTime = DateTime.Now, }; context.Companies.Add(company); context.SaveChanges(); } //新增的时候会先添加母表再添加子表 ,而且子表中的companyID 会自动写入, 这也就是级联的新增 //查询:EFCore中,默认情况下,查询主表,子表默认为null List<SysUser>--默认不加载; //1.想要加载: //贪婪加载:Include--在查询主表--自动的把字表也查询出来 //2.延迟加载:就是在我们需要的时候,才去查询数据 有两种方式来完成 //a.通过代理 //b.ILazyLoader 在实体中构造函数标出 using (CustomerDbContext context = new CustomerDbContext()) { //延迟加载: 默认是延迟加载来提高性能的 List<Company> companiList = context.Companies.ToList(); // 贪婪加载 子表的数据会一起加载出来,不写include的话,只有在使用子表的数据时候才去加载 List<Company> companiList1 = context.Companies.Include(c => c.SysUser).ToList(); //方法一: //使用带来支持延迟加载 需要引入一个程序集:Microsoft.EntityFrameworkCore.Proxies //方法二: ILazyLoader //支持了导航属性的延迟加载后,只有在使用到数据的时候才会正式的去查询数据库-- companiList = context.Companies.ToList(); Console.WriteLine("**************************************"); foreach (Company item in companiList) { Console.WriteLine(item.CompanyName); List<SysUser> userList = item.SysUser; foreach (SysUser us in userList) //只有在使用子表的数据时候才去加载 { Console.WriteLine(us.Name); Company company1 = us.Company; Console.WriteLine(company1.CompanyName); foreach (var us1 in company1.SysUser) { Console.WriteLine(us1.Name); } } } } }
直接删除子表的数据话 sysUser 无问题,删除母表 如果子表有使用母表的companyId 是不能删的,需要在数据库中设置级联删除,级联更改,外键关系那个地方