zoukankan      html  css  js  c++  java
  • Entity Framework对同一张表配置一对多关系

    在实际的项目开发中,可能会遇到同一张表同时保存自身和上级(或下级)的信息(一般是通过设置一个上级主键【ParentId】的列与主键【Id】关系)

    例如:城市库,有国家、省、市...,省的ParentId是国家的Id,同理市的ParentId是省的Id

    public class City
        {
            /// <summary>
            /// Id
            /// </summary>
            public int Id { get; set; }
            /// <summary>
            /// 名称
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 上级Id
            /// </summary>
            public int? ParentId { get; set; }
            /// <summary>
            /// 下级地区
            /// </summary>
            public virtual ICollection<City> ChildCitys { get; set; }
            /// <summary>
            /// 上级地区
            /// </summary>
            public virtual City Parent { get; set; }
        }
    View Code
    public class CityMap : EntityTypeConfiguration<City>
        {
            public CityMap()
            {
                ToTable("City");
                HasKey(c => c.Id);
                Property(c => c.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
                Property(c => c.Name).HasMaxLength(50);
    
                //配置关系
                HasMany(c => c.ChildCitys).WithOptional(c => c.Parent).HasForeignKey(k => k.ParentId);
            }
        }
    View Code
    static void Main(string[] args)
            {
    
                var country = new City {  Name="中国" };
                var province = new City { Name = "广东省" };
                var citys = new List<City>
                {
                    new City { Name="广州" },
                    new City { Name="深圳" },
                    new City { Name="珠海" }
                };
                province.ChildCitys = citys;
                country.ChildCitys = new List<City> { province };
                EFContext<City> context = new EFContext<City>();
                context.Table.Add(country);
                context.SaveChanges();
                Console.WriteLine("ok");
                Console.ReadKey();
            }
    View Code

     运行控制台程序

    然后查看数据库:

     示例使用的是Entity Framework 6.X,同时上面的关系是0..1←→N,因为国家没有上级(ParentId为null)

  • 相关阅读:
    lxml webdriver 抓取街拍
    python 正则抓取古诗词
    2021 最新版 Spring Boot 速记教程
    hbase 命令查看表大小
    Spring AOP,应该不会有比这更详细的介绍了!
    SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等
    API接口的安全设计验证:ticket,签名,时间戳
    5.控制台输出空心菱形
    4.灯泡开关问题
    EXCEL函数
  • 原文地址:https://www.cnblogs.com/godbell/p/7702047.html
Copyright © 2011-2022 走看看