您的位置:首页 > 其它

Entity Framework Code First -- 延迟加载和预先加载

2013-09-18 12:46 351 查看
还是以这两个表为例子





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

usingSystem.ComponentModel.DataAnnotations.Schema;

[code]usingSystem.Data.Entity.ModelConfiguration;

namespaceEFEntity.Models.Mapping
{

publicclasscityMap:EntityTypeConfiguration<city>
{

publiccityMap()
{

//PrimaryKey

this.HasKey(t=>t.ID);


//Properties

this.Property(t=>t.Name)

.IsRequired()

.HasMaxLength(35);


this.Property(t=>t.CountryCode)

.IsRequired()

.HasMaxLength(3);


this.Property(t=>t.District)

.IsRequired()

.HasMaxLength(20);


//Table&ColumnMappings

this.ToTable("city","world");

this.Property(t=>t.ID).HasColumnName("ID");

this.Property(t=>t.Name).HasColumnName("Name");

this.Property(t=>t.CountryCode).HasColumnName("CountryCode");

this.Property(t=>t.District).HasColumnName("District");

this.Property(t=>t.Population).HasColumnName("Population");


//Relationships//这里加了一个关系this.HasRequired(t=>t.country)//这个指向city模型的publicvirtualcountrycountry{get;set;}.WithMany(t=>t.cities)//这个指向country模型的publicvirtualICollection<city>cities{get;set;}.HasForeignKey(d=>d.CountryCode);//这个指向city模型的publicstringCountryCode{get;set;}
}
}
}

[/code]

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

usingSystem.ComponentModel.DataAnnotations.Schema;



usingSystem.Data.Entity.ModelConfiguration;






namespaceEFEntity.Models.Mapping


{



publicclasscountryMap:EntityTypeConfiguration<country>


{



publiccountryMap()


{



//PrimaryKey



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&ColumnMappings



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(varcontext=newworldContext())

{


varcountry=fromdincontext.countries


whered.Name=="UnitedStates"


selectd;


varcountryUS=country.Single();


if(countryUS==null)return;


foreach(varcityincountryUS.cities)

{


Console.WriteLine(city.Name);

}


Console.Read();


测试代码--预先加载:

using(varcontext=newworldContext())

{


varallCountries=context.countries.Include(p=>p.cities);


foreach(varcountryinallCountries)

{


Console.WriteLine(country.Name);


foreach(varcityincountry.cities)

{


Console.WriteLine("__"+city.Name);

}

}


Console.Read();

}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: