Entity Framework Code First -- 延迟加载和预先加载
还是以这两个表为例子

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 -- 延迟加载和预先加载的更多相关文章
- Entity Framework入门教程(8)---预先加载、延迟加载、显示加载
1.预先加载 预先加载:在对一种类型的实体进行查询时,将相关的实体作为查询的一部分一起加载.预先加载可以使用Include()方法实现. 1.加载一个相关实体类型 栗子:使用Include()方法从数 ...
- Entity Framework Code First实体关联数据加载
在项目过程中,两个实体数据之间在往往并非完全独立的,而是存在一定的关联关系,如一对一.一对多及多对多等关联.存在关联关系的实体,经常根据一个实体的实例来查询获取与之关联的另外实体的实例. Entity ...
- EF 延迟加载和预先加载
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨延迟加载和预先加载 Entity Frame ...
- Entity Framework关联实体的三种加载方法
推荐文章 EF性能之关联加载 总结很好 一:介绍三种加载方式 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌 ...
- Entity Framework Code First学习系列目录
Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...
- Entity Framework Code First学习系列
Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...
- Entity Framework Code First关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- Entity Framework Code First主外键关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- Entity Framework Code First关系映射约定【l转发】
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
随机推荐
- 经典的GDB调试命令,包括查看变量,查看内存
经典的GDB调试命令,包括查看变量,查看内存 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: p ...
- 【7】Django网页视图模板处理
天下难事必作於易.天下大事必作於细.是以圣人终不为大,故能成其大 --老子<道德经> 本节内容 HTML页面的渲染 使用页面模板 异常处理 超链接路径处理 路由命名空间 1. HTML页面 ...
- vue 底部bottomnav
<template> <div id="foot"> <div class="tabBar"> <div class= ...
- 【LeetCode Weekly Contest 26 Q3】Friend Circles
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/friend-circles/ [题意] 告诉你任意两个 ...
- [HZOJ10420]计算
[HZOJ10420]计算 题目 给定一个数列,第i个位置包含两个数ai,bi 每次询问给出x,y 求数列ai*x+bi*y的最大值 输入所有数为自然数,在int范围内 INPUT 第一行为n,m.n ...
- RestEasy 用户指南---第11章 @FormParam
转载说明出处:http://blog.csdn.net/nndtdx/article/details/6870391 原文地址 http://docs.jboss.org/resteasy/docs/ ...
- js for循环中的var与let
var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); 上面代码 ...
- hibernate分表保存日志
@Service("accessLogService")@Transactionalpublic class LogMessageServiceImpl extends BaseD ...
- Xposed获取微信usernamepassword
请关注我的微信公众号 參考文章:Xposed恶意插件 Android 安全专项-Xposed 劫持usernamepassword实践 0x00 我在之前的文章中演示了一下怎样通过Xposed获取us ...
- C++对象模型——关于对象(第一章)
第一章 关于对象 在C语言中,"数据"和"处理数据的操作(函数)"是分开声明的,也就是说,语言本身并没有支持"数据和函数"之间的关联性 ...