在实际的项目开发中,可能会遇到同一张表同时保存自身和上级(或下级)的信息(一般是通过设置一个上级主键【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; }
}
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(); //配置关系
HasMany(c => c.ChildCitys).WithOptional(c => c.Parent).HasForeignKey(k => k.ParentId);
}
}
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();
}

运行控制台程序

然后查看数据库:

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

Entity Framework对同一张表配置一对多关系的更多相关文章

  1. 10.Configure One-to-Many(配置一对多关系)【Code-First系列】

    现在,我们将学习怎么配置一对多的关系. Visit Entity Relationship section to understand how EF manages one-to-one, one-t ...

  2. 002从零开始入门Entity Framework Core——DbContext生存期、配置和初始化

    阅读须知:本文为入门介绍.指引文章,所示代码皆为最简易(或仅为实现功能)的演示示例版本,不一定切实符合个人(企业)实际开发需求. 一.DbContext生存期 DbContext 的生存期从创建实例时 ...

  3. Entity Framework中的主从表关系的使用

    其关系图: 我们使用Entity Framework生成映射关系如下: 其中author表中的books导航属性为一个集合,表示当前作者的书. 在页面中我们可以使用如下代码来实现: 代码中author ...

  4. Entity Framework - 基于外键关联的单向一对一关系

    代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关 ...

  5. django中两张表有外键关系的相互查找方法,自定义json编码方法

    两张通过外键联系的表,如何在一张表上根据另一张表上的属性查找满足条件的对象集? 平常查找表中数据的条件是python中已有的数据类型,通过名字可以直接查找.如果条件是表中外键列所对应表的某一列,该如何 ...

  6. Entity Framework 代码先行之约定配置

    要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面;还有一个就 ...

  7. Programming Entity Framework CodeFirst -- 约定和属性配置

     以下是EF中Data Annotation和 Fluenlt API的不同属性约定的对照.   Length Data Annotation MinLength(nn) MaxLength(nn) ...

  8. entity framework core 2.0 & sqlite 配置教程

    我用的是vs2017,需要下载.net core 2.0 sdk. .net core 下载地址:点我下载 1.在Visual Studio之中创建一个.net core的控制台项目 2.修改cspr ...

  9. Entity Framework Core 选择数据表的外键

    entityTypeBuilder .HasOne<GeraeteArt>() .WithMany(p => p.Geraete) .HasForeignKey(b => b. ...

随机推荐

  1. iphoneX 适配

    1.iphoneX的尺寸  375*812   上边有44px的危险区,下边有34px的危险区,剩下的是安全区. 2.viewport设值cover <meta name="viewp ...

  2. JAVA跨域资源访问CORSFilter

    当一个资源从与该资源本身所在的服务器不同的域或端口不同的域或不同的端口请求一个资源时,资源会发起一个跨域 HTTP 请求. 出于安全考虑,浏览器会限制从脚本内发起的跨域HTTP请求.跨域资源共享机制允 ...

  3. GridSearchCV

    GridSearchCV 简介: GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果.这个 ...

  4. Java并发编程笔记之ThreadLocal源码分析

    多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,多线程访问同一个共享变量特别容易出现并发问题,特别是多个线程需要对一个共享变量进行写入时候, ...

  5. 用java实现一个简易编译器-语法解析

    语法和解析树: 举个例子看看,语法解析的过程.句子:“我看到刘德华唱歌”.在计算机里,怎么用程序解析它呢.从语法上看,句子的组成是由主语,动词,和谓语从句组成,主语是“我”,动词是“看见”, 谓语从句 ...

  6. mysql备份与恢复数据

    先备份数据库使用 mysqldump -u root -plvtao 数据库 > /home/bak.sql再把备份的数据库还原就可以了导入数据库 常用source 命令 进入mysql数据库控 ...

  7. Linq学习教程

    http://www.cnblogs.com/foundation/archive/2009/01/05/1369371.html

  8. 十七、curator recipes之DistributedPriorityQueue

    简介 官方文档:http://curator.apache.org/curator-recipes/distributed-priority-queue.html javaDoc:http://cur ...

  9. 插入sql返回主键id

    <insert id="insertSelective" parameterType="com.xxx.model.XDetail" useGenerat ...

  10. 深入理解MyBatis的原理(三):配置文件(上)

    前言:前文提到一个入门的demo,从这里开始,会了解深入 MyBatis 的配置,本文讲解 MyBatis 的配置文件的用法. 目录 1.properties 元素 2.设置(settings) 3. ...