还是以这两个表为例子

country包含零个或多个city, 这个外键关系是我后来加上去,原来没有。 然后再用Power Tool逆向, 产生如下代码

   1:  using System.ComponentModel.DataAnnotations.Schema;
   2:  using System.Data.Entity.ModelConfiguration;
   3:   
   4:  namespace EFEntity.Models.Mapping
   5:  {
   6:      public class cityMap : EntityTypeConfiguration<city>
   7:      {
   8:          public cityMap()
   9:          {
  10:              // Primary Key
  11:              this.HasKey(t => t.ID);
  12:   
  13:              // Properties
  14:              this.Property(t => t.Name)
  15:                  .IsRequired()
  16:                  .HasMaxLength(35);
  17:   
  18:              this.Property(t => t.CountryCode)
  19:                  .IsRequired()
  20:                  .HasMaxLength(3);
  21:   
  22:              this.Property(t => t.District)
  23:                  .IsRequired()
  24:                  .HasMaxLength(20);
  25:   
  26:              // Table & Column Mappings
  27:              this.ToTable("city", "world");
  28:              this.Property(t => t.ID).HasColumnName("ID");
  29:              this.Property(t => t.Name).HasColumnName("Name");
  30:              this.Property(t => t.CountryCode).HasColumnName("CountryCode");
  31:              this.Property(t => t.District).HasColumnName("District");
  32:              this.Property(t => t.Population).HasColumnName("Population");
  33:   

34: // Relationships //这里加了一个关系 35: this.HasRequired(t => t.country) //这个指向city 模型的 public virtual country country { get; set; } 36: .WithMany(t => t.cities) //这个指向country模型的  public virtual ICollection<city> cities { get; set; } 37: .HasForeignKey(d => d.CountryCode); //这个指向city模型的public string CountryCode { get; set; }

  38:   
  39:          }
  40:      }
  41:  }

以上是city映射, 下面是country映射

using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
 
namespace EFEntity.Models.Mapping
{
    public class countryMap : EntityTypeConfiguration<country>
    {
        public countryMap()
        {
            // Primary Key
            this.HasKey(t => t.Code);
 
            // Properties
            this.Property(t => t.Code)
                .IsRequired()
                .HasMaxLength(3);
 
            this.Property(t => t.Name)
                .IsRequired()
                .HasMaxLength(52);
 
            this.Property(t => t.Continent)
                .IsRequired()
                .HasMaxLength(65532);
 
            this.Property(t => t.Region)
                .IsRequired()
                .HasMaxLength(26);
 
            this.Property(t => t.LocalName)
                .IsRequired()
                .HasMaxLength(45);
 
            this.Property(t => t.GovernmentForm)
                .IsRequired()
                .HasMaxLength(45);
 
            this.Property(t => t.HeadOfState)
                .HasMaxLength(60);
 
            this.Property(t => t.Code2)
                .IsRequired()
                .HasMaxLength(2);
 
            // Table & Column Mappings
            this.ToTable("country", "world");
            this.Property(t => t.Code).HasColumnName("Code");
            this.Property(t => t.Name).HasColumnName("Name");
            this.Property(t => t.Continent).HasColumnName("Continent");
            this.Property(t => t.Region).HasColumnName("Region");
            this.Property(t => t.SurfaceArea).HasColumnName("SurfaceArea");
            this.Property(t => t.IndepYear).HasColumnName("IndepYear");
            this.Property(t => t.Population).HasColumnName("Population");
            this.Property(t => t.LifeExpectancy).HasColumnName("LifeExpectancy");
            this.Property(t => t.GNP).HasColumnName("GNP");
            this.Property(t => t.GNPOld).HasColumnName("GNPOld");
            this.Property(t => t.LocalName).HasColumnName("LocalName");
            this.Property(t => t.GovernmentForm).HasColumnName("GovernmentForm");
            this.Property(t => t.HeadOfState).HasColumnName("HeadOfState");
            this.Property(t => t.Capital).HasColumnName("Capital");
            this.Property(t => t.Code2).HasColumnName("Code2");
        }
    }
}
 

测试代码--延迟加载:

 using (var context = new worldContext())
            {
                var country = from d in context.countries
                            where d.Name == "United States"
                            select d;
                var countryUS = country.Single();
                if (countryUS == null) return;
                foreach (var city in countryUS.cities)
                {
                    Console.WriteLine(city.Name);
                }
                Console.Read();

测试代码--预先加载:

            using (var context = new worldContext())
            {
                var allCountries = context.countries.Include(p => p.cities);
                foreach (var country in allCountries)
                {
                    Console.WriteLine(country.Name);
                    foreach (var city in country.cities)
                    {
                        Console.WriteLine("__" + city.Name);
                    }
                }
                Console.Read();
            }

 

Entity Framework Code First -- 延迟加载和预先加载的更多相关文章

  1. Entity Framework入门教程(8)---预先加载、延迟加载、显示加载

    1.预先加载 预先加载:在对一种类型的实体进行查询时,将相关的实体作为查询的一部分一起加载.预先加载可以使用Include()方法实现. 1.加载一个相关实体类型 栗子:使用Include()方法从数 ...

  2. Entity Framework Code First实体关联数据加载

    在项目过程中,两个实体数据之间在往往并非完全独立的,而是存在一定的关联关系,如一对一.一对多及多对多等关联.存在关联关系的实体,经常根据一个实体的实例来查询获取与之关联的另外实体的实例. Entity ...

  3. EF 延迟加载和预先加载

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨延迟加载和预先加载 Entity Frame ...

  4. Entity Framework关联实体的三种加载方法

    推荐文章 EF性能之关联加载 总结很好 一:介绍三种加载方式 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌 ...

  5. Entity Framework Code First学习系列目录

    Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...

  6. Entity Framework Code First学习系列

    Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...

  7. Entity Framework Code First关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  8. Entity Framework Code First主外键关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  9. Entity Framework Code First关系映射约定【l转发】

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

随机推荐

  1. jquery 对 table 的操作

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...

  2. 【VIP视频网站项目】VIP视频网站项目v1.0.3版本发布啦(程序一键安装+电影后台自动抓取+代码结构调整)

    在线体验地址:http://vip.52tech.tech/ GIthub源码:https://github.com/xiugangzhang/vip.github.io 项目预览 主页面 登录页面 ...

  3. 【codeforces 767A】Snacktower

    [题目链接]:http://codeforces.com/contest/767/problem/A [题意] 每天掉一个盘子下来;盘子有大小从1..n依次增大n个盘子; 然后让你叠盘子; 最底层为n ...

  4. bupt summer training for 16 #3 ——构造

    https://vjudge.net/contest/172464 后来补题发现这场做的可真他妈傻逼 A.签到傻逼题,自己分情况 #include <cstdio> #include &l ...

  5. [繁华模拟赛]Evensgn 剪树枝

    Evensgn 剪树枝 题目 繁华中学有一棵苹果树.苹果树有 n 个节点(也就是苹果),n − 1 条边(也就 是树枝).调皮的 Evensgn 爬到苹果树上.他发现这棵苹果树上的苹果有两种:一 种是 ...

  6. F2BPM作流引擎系列索引

    索引如下 F2工作流引擎遵循参考WFCM标准规范,符合中国国情特色,更轻量级的工作流引擎,支持多种数据库(mmsqlserver,mysql,oracle),有强大智能的组织模型接口可快速应用到任何基 ...

  7. Skia图片解码模块流程分析

    我在在PPAPI插件中使用Skia画图中说能够在PPAPI插件内使用Skia来画图.这里面会有一个与色彩空间(像素格式)相关的问题.在那篇文章里我们在PPAPI中使用PPB_ImageData创建2D ...

  8. Libs文件夹下的Jar文件为什么不会自己主动放在Android Private Libraries文件夹下

    简而言之:这个问题就是由jar包反复冲突了! 这个问题一開始我出现了一种"自以为是"的答案,在Android Private Libraries文件夹下的是会打包到project可 ...

  9. LeetCode——Permutation Sequence

    The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  10. TDD尝试:nodejs单元测试

    单元测试是最小化的测试方式,也是TDD的做法. TDD概念如下图: 通过测试反馈推进开发,ruby是推崇这种编程方式的. nodejs有如下常用单元测试模块 1.mocha Mocha是一个基于nod ...