Entity Framework表拆分為多個實體
更新時間:2022年03月05日 09:44:04 作者:.NET開發(fā)菜鳥
這篇文章介紹了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 { /// <summary> /// 縮略圖類 /// </summary> public class Photograph { /// <summary> /// 設置PhotoId是主鍵 自動增長 /// </summary> [Key] [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)] public int PhotoId { get; set; } public string Title { get; set; } /// <summary> /// 縮略圖 /// </summary> public byte[] ThumbnailBite { get; set; } /// <summary> /// Photograph通過導航屬性引用PhotographFullImage /// </summary> [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; } /// <summary> /// 高分辨率 /// </summary> public byte[] HighResolutionBits { get; set; } /// <summary> /// PhotographFullImage通過導航屬性引用Photograph /// </summary> [ForeignKey("PhotoId")] public virtual Photograph Photograph { get; set; } } }
3、創(chuàng)建數(shù)據(jù)上下文對象子類:
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<Photograph> Photographs { get; set; } public DbSet<PhotographFullImage> PhotographFullImages { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 設置主體 modelBuilder.Entity<Photograph>().HasRequired(p => p.PhotographFullImage).WithRequiredPrincipal(t => t.Photograph); // 生成同一張表:設置兩個實體有相同的表名 modelBuilder.Entity<Photograph>().ToTable("Photograph"); modelBuilder.Entity<PhotographFullImage>().ToTable("Photograph"); base.OnModelCreating(modelBuilder); } } }
4、使用數(shù)據(jù)遷移生成數(shù)據(jù)庫結構,查看生成后的結構:
5、寫入數(shù)據(jù)
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()) { // 寫入數(shù)據(jù) 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("創(chuàng)建成功"); Console.ReadKey(); } } }
6、查詢數(shù)據(jù)
到此這篇關于Entity Framework表拆分為多個實體的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。