千家信息网

Entity Framework表拆分为多个实体的示例分析

发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,小编给大家分享一下Entity Framework表拆分为多个实体的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!概念表拆分:一个表拆分成多个实体,例如Photograph表
千家信息网最后更新 2025年11月14日Entity Framework表拆分为多个实体的示例分析

小编给大家分享一下Entity Framework表拆分为多个实体的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

概念

表拆分:一个表拆分成多个实体,例如Photograph表,可以拆分为Photograph和PhotographFullImage两张表。

1、Photograph实体结构:

using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CodeFirstTableSplit.Model{    ///     /// 缩略图类    ///     public class Photograph    {        ///         /// 设置PhotoId是主键 自动增长        ///         [Key]        [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]        public int PhotoId { get; set; }        public string Title { get; set; }        ///         /// 缩略图        ///         public byte[] ThumbnailBite { get; set; }        ///         /// Photograph通过导航属性引用PhotographFullImage        ///         [ForeignKey("PhotoId")]        public virtual PhotographFullImage PhotographFullImage { get; set; }    }}

2、PhotographFullImage实体结构:

using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CodeFirstTableSplit.Model{    public class PhotographFullImage    {        [Key]        public int PhotoId { get; set; }        ///         /// 高分辨率        ///         public byte[] HighResolutionBits { get; set; }        ///         /// PhotographFullImage通过导航属性引用Photograph        ///         [ForeignKey("PhotoId")]        public virtual Photograph Photograph { get; set; }    }}

3、创建数据上下文对象子类:

using CodeFirstTableSplit.Model;using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CodeFirstTableSplit.DatabaseContext{    public class EFDbContext :DbContext    {        public EFDbContext()            : base("name=Default")        { }        public DbSet Photographs { get; set; }        public DbSet PhotographFullImages { get; set; }        protected override void OnModelCreating(DbModelBuilder modelBuilder)        {            // 设置主体            modelBuilder.Entity().HasRequired(p => p.PhotographFullImage).WithRequiredPrincipal(t => t.Photograph);            // 生成同一张表:设置两个实体有相同的表名            modelBuilder.Entity().ToTable("Photograph");            modelBuilder.Entity().ToTable("Photograph");            base.OnModelCreating(modelBuilder);        }    }}

4、使用数据迁移生成数据库结构,查看生成后的结构:

5、写入数据

using CodeFirstTableSplit.DatabaseContext;using CodeFirstTableSplit.Model;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CodeFirstTableSplit{    class Program    {        static void Main(string[] args)        {            using (var context = new EFDbContext())            {                // 写入数据                byte[] thumbBits = new byte[100];                byte[] fullBits = new byte[2000];                var photo = new Photograph() { Title = "李四", ThumbnailBite = thumbBits };                var fullImage = new PhotographFullImage() { HighResolutionBits = fullBits };                photo.PhotographFullImage = fullImage;                context.Photographs.Add(photo);                // 保存                context.SaveChanges();            }            Console.WriteLine("创建成功");            Console.ReadKey();        }    }}

6、查询数据

看完了这篇文章,相信你对"Entity Framework表拆分为多个实体的示例分析"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

0