一、EF多實體對應單表數據庫
適用場景:單數據庫表,表數據有較長用字段,有不經常使用或者大數據字段。ide
二、建表語句 大數據
CREATE TABLE [Chapter2].[Photograph]( [PhotoId] [int] IDENTITY(1,1) primary key NOT NULL, [Title] [varchar](50) NOT NULL, [ThumbnailBits] [image] NOT NULL, [HighResolutionBits] [image] NOT NULL )
三、新建控制程序,添加EntityFramework 引用。ui
四、建立兩個實體實體,實體由同一個表不一樣字段組成。spa
public class PictureContext : DbContext { public DbSet<Photograph> Photographs { get; set; } public DbSet<PhotographFullImage> PhotographFullImage { get; set; } public PictureContext() : base("EFRecipesEntities") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Photograph>() .HasRequired(p => p.PhotographFullImage) .WithRequiredPrincipal(p => p.Photograph); modelBuilder.Entity<Photograph>().ToTable("Photograph", "Chapter2"); modelBuilder.Entity<PhotographFullImage>().ToTable("Photograph", "Chapter2"); } } public class Photograph { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int PhotoId { get; set; } public string Title { get; set; } public byte[] ThumbnailBits { get; set; } [ForeignKey("PhotoId")] public virtual PhotographFullImage PhotographFullImage { get; set; } } public class PhotographFullImage { [Key] public int PhotoId { get; set; } public byte[] HighResolutionBits { get; set; } [ForeignKey("PhotoId")] public virtual Photograph Photograph { get; set; } }
注意圖中指定Photograph實體須要(HasRequired) PhotographFullImage實體,並經過WithRequiredPrincipal,指定主鍵由Photograph負責。code
五、修改Main程序以下:blog
static void Main(string[] args) { byte[] thumbBits = new byte[100]; byte[] fullBits = new byte[2000]; using (var context = new PictureContext()) { var photo = new Photograph { Title = "My Dog", ThumbnailBits = thumbBits }; var fullImage = new PhotographFullImage { HighResolutionBits = fullBits }; photo.PhotographFullImage = fullImage; context.Photographs.Add(photo); context.SaveChanges(); } using (var context = new PictureContext()) { foreach (var photo in context.Photographs) { Console.WriteLine("Photo: {0}, ThumbnailSize {1} bytes", photo.Title, photo.ThumbnailBits.Length); // explicitly load the "expensive" entity, context.Entry(photo).Reference(p => p.PhotographFullImage).Load(); Console.WriteLine("Full Image Size: {0} bytes", photo.PhotographFullImage.HighResolutionBits.Length); } } Console.ReadKey(); }