这是一位朋友提出的疑问,EF 映射主键可以对应多个外键吗?如果外键设置级联删除会发生什么情况?下面做一个测试,示例实体代码:

public class Blog
{
public Blog()
{
Post1s = new List<Post1>();
Post2s = new List<Post2>();
}
public int Id { get; set; }
public string Title { get; set; }
public string Url { get; set; }
public string Remark { get; set; }
public virtual List<Post1> Post1s { get; set; }
public virtual List<Post2> Post2s { get; set; }
} public class Post1
{
public int Id { get; set; }
public int BlogId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public virtual Blog Blog { get; set; }
}
public class Post2
{
public int Id { get; set; }
public int BlogId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public virtual Blog Blog { get; set; }
}

Blog 作为主表,Post1 和 Post2 作为字表,对应关系是一对多,示例映射代码:

public DbSet<Blog> Blogs { get; set; }
public DbSet<Post1> Post1s { get; set; }
public DbSet<Post2> Post2s { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasKey(t => t.Id); modelBuilder.Entity<Blog>()
.HasMany(t => t.Post1s)
.WithRequired()
.HasForeignKey(t => t.BlogId)
.WillCascadeOnDelete(true); modelBuilder.Entity<Blog>()
.HasMany(t => t.Post2s)
.WithRequired()
.HasForeignKey(t => t.BlogId)
.WillCascadeOnDelete(true); modelBuilder.Entity<Post1>()
.HasKey(t => t.Id);
modelBuilder.Entity<Post2>()
.HasKey(t => t.Id); base.OnModelCreating(modelBuilder);
}

生成数据结构:

测试数据代码:

static void Main(string[] args)
{
using (var context=new BloggingContext())
{
//var blog = new Blog
//{
// Remark = "1",
// Title = "1",
// Url = "1"
//};
//blog.Post1s.Add(new Post1
//{
// Title = "1",
// Blog = blog,
// Content = "1"
//});
//blog.Post2s.Add(new Post2
//{
// Title = "1",
// Blog = blog,
// Content = "1"
//});
//context.Blogs.Add(blog);
var blog = context.Blogs.FirstOrDefault();
context.Blogs.Remove(blog);
context.SaveChanges();
Console.ReadKey();
}
}

测试结果我就不截图了,上面映射配置中,Blog 和 Post1、Post2 关系是一对多,并且级联删除,当我们添加 Blog 中的数据,Post1、Post2 也会自动生成对应的外键值,当我们删除 Blog 中的数据,外键对应 Post1、Post2 中的数据也会自动删除。

总的来说,EF Code First 主键对应多个外键?答案是:没什么问题。

EF Code First 主键对应多个外键的更多相关文章

  1. MySQL删除所有表的外键约束、禁用外键约束

    转: MySQL删除所有表的外键约束.禁用外键约束 2017年10月27日 00:11:34 李阿飞 阅读数:4512   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  2. (转载)MySQL删除所有表的外键约束、禁用外键约束

    其实如果想删除所有表可以直接如下操作: 在navicat中直接选中所有表,然后右键删除表即可,会有提示,一路确定,就会先删掉没有外键的表和字表,只要一路确定,删几批就把表都删完了,并不算太麻烦. 转: ...

  3. PowerDesigner删除外键关系,而不删除外键列[转] 及编码格式

    PowerDesigner删除外键关系,而不删除外键列[转]  数据库 database  -> generate database ->format 设置为utf-8 PowerDesi ...

  4. 数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)

    1. 数据库有六大约束 主键(primary key) 外键(foreign key):被参照的键必须有唯一约束或是主键 非空(not null) 默认(default) 检查(check):orac ...

  5. Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)

    有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...

  6. Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

    1:Hibernate的关联关系映射的一对一外键映射: 1.1:第一首先引包,省略 1.2:第二创建实体类: 这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信 ...

  7. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  8. 在oracle中查询已知表名的表中所有字段名,每个字段是否是主键,是否是外键,是否为空的sql语句

    查询表的所有列及其属性:select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c ...

  9. java:Hibernate框架2(关联映射(多对一,一对多,一对多双向,一对一主键,一对一唯一外键,多对多双向))

      hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...

随机推荐

  1. axis2开发webservice程序

    一.环境 eclipse + jdk 6.0 + win7 64位 +tomcat7.0 二.创建服务端程序 1.新建web项目,webserviceTest 2.下载axis2,将lib目录下的ja ...

  2. 通读SDWebImage③--gif和webP的支持、不同格式图片的处理、方向处理

    本文目录 NSData+ImageContentType: 根据NSData获取MIME UIImage+GIF UIImage+WebP UIImage+MultiFormat:根据NSData相应 ...

  3. >hibernate-session中的方法

    1.操作实体对象的方法 save()  保存 update() 更新 saveOrUpdate() 保存或更新 delete() 删除 2.操作缓存的方法 clear()  清除所有缓存 evit() ...

  4. Daily Scrum02 12.11

    今天的会议的主要内容基本是解决界面组的问题,原本开始进行人员分配的时候没有考虑到要花特别长的时间为美化界面整理素材,且由于进行素材PS的同学的时间安排问题,和不熟练,很久没有将素材准备这项任务完成.因 ...

  5. Kafka设计解析(四)- Kafka Consumer设计解析

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/08/09/KafkaColumn4 摘要 本文主要介绍了Kafka High Level Con ...

  6. 10分钟学会前端调试利器——FireBug

    概述 FireBug是一个用于网站前端开发的工具,它是FireFox浏览器的一个扩展插件.它可以用于调试JavaScript.查看DOM.分析CSS.监控网络流量以及进行Ajax交互等.它提供了几乎前 ...

  7. Oracle中的CHR()函数与ASCII()函数

    工作中经常会处理一些因特殊字符而导致的错误,如上周我就遇到了因为换行符和回车符导致的数据上报的错误,这种错误比较难以发现,通常是由于用户的输入习惯导致的,有可能数据极少,就那么几行错误从而导致整个数据 ...

  8. 简单正则匹配QQ邮箱

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <script src ...

  9. TestNG Assert 详解

    org.testng.Assert 用来校验接口测试的结果,那么它提供哪些方法呢? 中心为Assert测试类,一级节点为方法例如assertEquals,二级结点为参数类型及参数个数,double 3 ...

  10. JS请求服务器并使页面跳转(转)

    前段时间在项目中用到了前台框架EasyUI,各种组件都是差不多都是用js来渲染的,这样一些页面请求就必须用js代码来写. 但是js请求就不和html请求的玩法不怎么相同,比如我要向服务器发送一个请求然 ...