随笔分类 - Entity Framework
摘要:在Code-First中,默认生成的数据库表的名称为类型的复数形式,如Model名为“Player”,默认生成的数据库表名为“Players”。很多情况下我们并不想生成的数据库表名为复数形式,如何来控制呢? 当我们想要自定义一些生成数据库表的规则的时候,会重写OnModelCreating方法,控制表明的单复数形式同样可以在这个方法中完成,代码如下:View Code 1 protected override void OnModelCreating(DbModelBuilder modelBuilder)2 {3 modelBuilder.Conv...
阅读全文
摘要:1 class Program 2 { 3 static void Main(string[] args) 4 { 5 BreakAwayEntities context = new BreakAwayEntities(); 6 var query = from r in context.Reservations join p in context.Payments on r.ReservationID equals p.ReservationID select new { r.Customer, p.R...
阅读全文
摘要:在Entity Framework中,有时我们想要得到真正的数据库表的名称,可以通过Metadata来得到。直接上代码:View Code 1 static void Main(string[] args) 2 { 3 using (BreakAwayEntities context = new BreakAwayEntities()) 4 { 5 var metadata = context.MetadataWorkspace; 6 var tables = me...
阅读全文
摘要:将一个实体映射到多张数据库表,我们只能用Fluent API来做,Data Annotation无法满足要求,我们来看一下代码:View Code 1 class People 2 { 3 public int Id { get; set; } 4 public string Name { get; set; } 5 public DateTime Birth { get; set; } 6 public bool Sex { get; set; } 7 public string Description...
阅读全文
摘要:要将多个实体映射到一个数据库表必须要满足两个条件:两个实体必须是一对一关系;两个实体共享一个主键。 下面我们直接用代码来说明:View Code 1 [Table("People")] 2 class Person 3 { 4 public int Id { get; set; } 5 public string Name { get; set; } 6 public bool Sex { get; set; } 7 public PersonDetail detail { get; set; } 8 ...
阅读全文
摘要:在前面两回我们分别分析了Lazy Loading和Explicit Loading,这一回我们来分析一下Eager Loading。在某些情况下,我们可能事先知道要需要加载某些实体的相关实体,这时我们就可以用Include方法来在加载实体的查询语句中把相关实体也一并查询出来。下面我们还用前两回使用的数据库来写一个例子来分析一下Eager Loading:View Code 1 using (var context = new TestEntities()) 2 { 3 var players = from p in context.Pl...
阅读全文
摘要:上一回我们在《Entity Framework加载相关实体——Lazy Loading》分析了Lazy Loading,这一回我们来分析一下在关闭Lazy Loading的情况下,如果显式加载实体。数据库我们依旧使用Lazy Loading中使用的数据库。之前我们分析过来,当Lazy Loading关闭时,执行以下代码是无法得到结果的,因为Player的信息并没有被加载。View Code 1 using (TestEntities context = new TestEntities())2 {3 IQueryable<Team> t...
阅读全文
摘要:Entity Framework提供了三种加载相关实体的方法:Lazy Loading,Eager Loading和Explicit Loading。首先我们先来看一下MSDN对三种加载实体方法的定义。Lazy Loading:对于这种类型的加载,在您访问导航属性时,会从数据源自动加载相关实体。使用此加载类型时,请注意,如果实体尚未在ObjectContext中,则您访问的每个导航属性都会导致针对数据源执行一个单独的查询。Eager Loading:当您了解应用程序需要的相关实体的图形的确切形状时,可以使用ObjectQuery的Include方法来定义查询路径,此查询路径控制将哪些相关实体作
阅读全文
摘要:首先我们来看一看Entity Framework的各个重要组件: EDM 首先来认识一下EDM(Entity Data Model), EDM是Model和数据库之间的桥梁,它描述数据库,Mo...
阅读全文