还是以这两个表为例子

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. pig常用命令

    一.pig: pig提供了一个基于Hadoop的并行地执行数据流处理的引擎.它包含了一种脚本语言,称为Pig Latin.(类似SQL) 二.Pig Latin: 1.注释: 单行:-- 多行:/* ...

  2. 【剑指Offer】剑指offer题目汇总

      本文为<剑指Offer>刷题笔记的总结篇,花了两个多月的时间,将牛客网上<剑指Offer>的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于 ...

  3. hdu 4018 Parsing URL(字符串截取)

    题目 以下引用自百度百科: sscanf 的相关用法 头文件:#include<stdio.h>     1. 常见用法. 1 2 3 charbuf[512]; sscanf(" ...

  4. Swoole 源码分析——Server模块之Worker事件循环

    swManager_loop 函数 manager 进程管理 manager 进程开启的时候,首先要调用 onManagerStart 回调 添加信号处理函数 swSignal_add,SIGTERM ...

  5. MySQL数据库操作(一)

    一.数据操作 1.显示数据库 show databases; 2.创建数据库 #utf- create database 数据库名称 default charset utf8 collate utf8 ...

  6. extjs 4 chart 时间轴格式的处理

    var dayStore = Ext.create('Ext.data.JsonStore', { fields: [{ name: 'name', type: 'date', dateFormat: ...

  7. PatentTips - Power management implementation in an optical link

    BACKGROUND INFORMATION Embodiments of the present invention are directed to optical links and, more ...

  8. Office 2003的卸载 与 Office 2013 的安装

    一.Office 2003的卸载 软件:卸载Office2003.msi 运行该软件,等待几分钟即可, 二.Office 2013 的安装 1.Office Professional Plus 201 ...

  9. nyoj_478_月老的烦恼(1)_201312101248

    月老的烦恼(1) 时间限制:1000 ms  |           内存限制:65535 KB 难度:3   描述 月老最近遇到了一个很棘手的问题,就是“剩男”“剩女”急速增长,而自己这边又人手不足 ...

  10. memcached集群

    借鉴:http://www.cnblogs.com/happyday56/p/3461113.html 首先说明下memcached存在如下问题 本身没有内置分布式功能,无法实现使用多台Memcach ...