声明方式
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; }
}
public class PhotoContext : DbContext
{
public DbSet<Photograph> Photographs { get; set; }
public DbSet<PhotographFullImage> PhotographFullImages { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Photograph>()
//配置必需关系。 数据库中的外键不可为 null否则无法保存到数据库。
.HasRequired(p => p.PhotographFullImage)
//作为关系目标的主体类型将成为依赖对象,且包含主体的外键
.WithRequiredPrincipal(p => p.Photograph);
modelBuilder.Entity<Photograph>().ToTable("Table1");
modelBuilder.Entity<PhotographFullImage>().ToTable("Table2");
}
}
怎么使用
static void Main(string[] args)
{
var thumbBits = new byte[100];
var fullBits = new byte[2000];
using (var context = new PhotoContext())
{
var photo = new Photograph
{
Title = "小狗",
ThumbnailBits = thumbBits
};
var fullImage = new PhotographFullImage { HighResolutionBits = fullBits };
photo.PhotographFullImage = fullImage;
context.Photographs.Add(photo);
context.SaveChanges();
}
using (var context = new PhotoContext())
{
foreach (var photo in context.Photographs)
{
Console.WriteLine("照片: {0}, 压缩 {1} bytes",
photo.Title, photo.ThumbnailBits.Length);
// 显式地加载了“昂贵”的实体
context.Entry(photo).Reference(p => p.PhotographFullImage).Load();
Console.WriteLine("原始: {0} bytes",
photo.PhotographFullImage.HighResolutionBits.Length);
}
Console.ReadKey();
}
}
生成实体结构
运行效果