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.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
随机推荐
- Luogu P3901 数列找不同
由于技术原因,题目我贴不上了,大家点下面的链接自己去看吧^_^ P3901 数列找不同 这题第一眼看去,题面真短,有坑(flag) 在往下面看去,woc数据这么大,你要怎样. 现在一起想想想,超级侦探 ...
- VsCode 格式化插件配置
Beautify 1.在工作目录下建立.jsbeautifyrc文件: { "brace_style": "none,preserve-inline", &qu ...
- models中,字段参数limit_choices_to的用法
这里,在使用 ModelForm 渲染前端页面的前提下,对于 models 中的 ManyToManyField 类型字段会在 ModelForm 中被转化为 ModelMultipleChoiceF ...
- axios请求中跨域及post请求问题解决方案
闲话不多说,用到vue的童鞋们应该大部分都会遇到请求中的各种奇葩问题,昨天研究一天,终于搞出来个所以然了,写篇文章拯救一下广大的童鞋们,某度娘当然也可以搜到,但一般解决了一个问题后就会出现另外一个问题 ...
- 【3】数据筛选2 - requests
目录 1.概述 2.下载安装 3.入门程序 4.请求对象:请求方式 5.请求对象:GET参数传递 6.请求对象:POST参数传递 7.请求对象: ...
- 一个电商项目的Web服务化改造2:现有项目的5个问题
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步, 1.现有项目的问题 1.1代码风格不统一 不同的 ...
- SCI 论文金句
SCI 不会写?其实英语基础好一点,文献多看一点,多写写自然就能自己写出来了.当然,你肯定会说英语真的好难,好吧,就知道你们懒得学英语了.我给你们整理了一套万能模板,涵盖了论文不同部分的常用句型. 摘 ...
- mybatis注解开发-动态SQL
实体类以及表结构 在mybatis-config.xml中注册mapper接口 -------------------------- 动态查询@SelectProvider EmployeeMappe ...
- AndroidTreeView:Android树形节点View
AndroidTreeView:Android树形节点View AndroidTreeView是github上的一个第三方开源项目,其在github上的项目主页是:https://github. ...
- [POJ1226]Substrings(后缀数组)
传送门 给定 n 个字符串,求出现或反转后出现在每个字符串中的最长子串. 算法分析: 这题不同的地方在于要判断是否在反转后的字符串中出现.其实这并没有加大题目的难度. 只需要先将每个字符串都反过来写一 ...