2013-11-20 11 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