本文共 2608 字,大约阅读时间需要 8 分钟。
这是一位朋友提出的疑问,EF 映射主键可以对应多个外键吗?如果外键设置级联删除会发生什么情况?下面做一个测试,示例实体代码:
public class Blog{ public Blog() { Post1s = new List(); Post2s = new List (); } public int Id { get; set; } public string Title { get; set; } public string Url { get; set; } public string Remark { get; set; } public virtual List Post1s { get; set; } public virtual List 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 DbSetBlogs { get; set; }public DbSet Post1s { get; set; }public DbSet Post2s { get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder){ modelBuilder.Entity () .HasKey(t => t.Id); modelBuilder.Entity () .HasMany(t => t.Post1s) .WithRequired() .HasForeignKey(t => t.BlogId) .WillCascadeOnDelete(true); modelBuilder.Entity () .HasMany(t => t.Post2s) .WithRequired() .HasForeignKey(t => t.BlogId) .WillCascadeOnDelete(true); modelBuilder.Entity () .HasKey(t => t.Id); modelBuilder.Entity () .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 主键对应多个外键?答案是:没什么问题。
本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/4377549.html,如需转载请自行联系原作者