2013-11-20 16 views
0

到目前爲止,我已經在數據庫表之間建立了流暢的api關聯。如何用流利的api命名地圖關聯

例如:

//Map Skill Associations 
modelBuilder.Entity<Skill>() 
    .HasMany(s => s.Employees).WithMany(e => e.Skills) 
    .Map(m => { 
     m.ToTable("Employee_Skill"); 
     m.MapLeftKey("SkillID"); 
     m.MapRightKey("EmployeeID"); 
    }); 

//Map Employee Associations 
modelBuilder.Entity<Employee>() 
    .HasMany(e => e.Skills).WithMany(s => s.Employees) 
    .Map(m => { 
     m.ToTable("Employee_Skill"); 
     m.MapLeftKey("EmployeeID"); 
     m.MapRightKey("SkillID"); 
    }); 

//Map Client Properties to Fields 
modelBuilder.Entity<Employee>() 
    .HasKey(e => e.EmployeeId).ToTable("Employee"); 
modelBuilder.Entity<Employee>() 
    .Property(e => e.EmployeeId).HasColumnName("id"); 
modelBuilder.Entity<Employee>() 
    .Property(e => e.FirstName).HasColumnName("fname"); 
modelBuilder.Entity<Employee>() 
    .Property(e => e.LastName).HasColumnName("lname"); 
modelBuilder.Entity<Employee>() 
    .Property(e => e.LinkedIn).HasColumnName("linkedin"); 
modelBuilder.Entity<Employee>() 
    .Property(e => e.Active).HasColumnName("active"); 
modelBuilder.Entity<Employee>() 
    .Property(e => e.Inactive).HasColumnName("inactive"); 
modelBuilder.Entity<Employee>() 
    .Property(e => e.Created).HasColumnName("created"); 

//Map Skill Properties to Fields 
modelBuilder.Entity<Skill>() 
    .HasKey(s => s.SkillId).ToTable("Skill"); 
modelBuilder.Entity<Skill>() 
    .Property(s => s.SkillId).HasColumnName("id"); 
modelBuilder.Entity<Skill>() 
    .Property(s => s.Name).HasColumnName("name"); 
modelBuilder.Entity<Skill>() 
    .Property(s => s.Description).HasColumnName("description"); 
modelBuilder.Entity<Skill>() 
    .Property(s => s.Active).HasColumnName("active"); 
modelBuilder.Entity<Skill>() 
    .Property(s => s.Inactive).HasColumnName("inactive"); 

在過去,我已經處理了DBMX文件,做實體的之間的視覺聯繫。在代碼中,當我想加載關聯時,我會執行類似Context.Employees.Include("Skills")的操作,以確保Employee實體將在返回集合中加載關聯的技能。

隨着流利,我怎麼可以使用相同的語法結構加載(認爲它的LazyLoading)收集對象在需要時,否則不會自動加載它們。

我似乎沒有任何選項允許我將技能或僱員的名稱命名爲相應的實體。

任何幫助將不勝感激。

回答

1

要使用LazyLoading,您應該在模型類中將您的屬性定義爲虛擬。在流利的配置,無需更改:

class Skill 
{ 
    ... 
    public virtual List<Employee> Employees { get; set; } 
} 

class Employee 
{ 
    ... 
    public virtual List<Skill> Skills { get; set; } 
} 

瞭解更多關於惰性加載here

+0

你說使用'virtual'但你的代碼示例缺少'virtual'關鍵字 – Claies

+0

@Alexander:我明白你的意思。曾經玩過這個想法。刷新我的記憶,當我訪問數據部分正確時,虛擬方法只加載數據?像'Employee.Skills'這樣的東西,還是我需要做'Include(「技能」)'加載屬性的數據? – GoldBishop

+0

對不起,忘了虛擬) – alexmac