C# entityframework6 表拆分(六)

表拆分使我们能够将多个实体映射到数据库单表,也就是说我们可以将模型中的多个实体映射到数据库中一张表里。下面以雇员为例
Employee

public class Employee
    {
        public string employeeId { get; set; }

        public string employeeName { get; set; }

        public string phoneNumber { get; set; }

        public string address { get; set; }

        public DateTime employTime { get; set; }

        public virtual EmployeeParent EmployeeParent { get; set; }
    }

EmployeeParent

public class EmployeeParent
    {
        public string iiiiid { get; set; }

        public Employee employee { get; set; }

        public string test { get; set; }
    }

将EmployeeParent设置为Employee的导航属性

下面将两个实体映射到一张表中

EmployeeMap

public class EmployeeMap : EntityTypeConfiguration<Employee>
    {
        public EmployeeMap()
        {
            ToTable("tablesplit");
            HasKey(p => p.employeeId);
            HasRequired(p => p.EmployeeParent).WithRequiredPrincipal(o => o.employee);
        }
    }

EmployeeParentMap

public class EmployeeParentMap:EntityTypeConfiguration<EmployeeParent>
    {
        public EmployeeParentMap()
        {
            ToTable("tablesplit");
            HasKey(p => p.iiiiid);
        }
    }

demo

EmployeeParent stu = new EmployeeParent()
            {
                test = "haha",
                employee = new Employee()
                {
                    employeeId = System.Guid.NewGuid().ToString("N"),
                    employeeName = "chen",
                    employTime = DateTime.Now,
                    address = "dalian",
                    phoneNumber = "1233456"
                }
            };
            using (var dd = new Model1())
            {
                dd.employee.Add(stu);
                dd.SaveChanges();

                var test = dd.employee.ToList();
                var tt = dd.employee2;
                foreach (var item in test)
                {
                    item.employee=tt.Where(t=>t.employeeId==item.iiiiid).First();
                    item.employee.employeeName = "cc";
                }
                dd.SaveChanges();
            }

DbContext

public partial class Model1 : DbContext
    {
        public Model1()
            : base("name=Model1")
        {
        }

        public virtual DbSet<EmployeeParent> employee { get; set; }
        public virtual DbSet<Employee> employee2 { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            var typesTomap = Assembly.GetExecutingAssembly().GetTypes()
                .Where(type => !String.IsNullOrEmpty(type.Namespace))
                .Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType
                .GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
            foreach (var item in typesTomap)
            {
                dynamic config = Activator.CreateInstance(item);
                modelBuilder.Configurations.Add(config);
            }
            base.OnModelCreating(modelBuilder);
        }
    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值