2014-02-26 58 views
0

像NHibernate一樣,是否可以使用實體框架中的現有實體映射現有表。使用實體框架中的現有表映射現有實體

例如。我有實體

public class User 
{ 
    public Int64 userId { set; get; } 
    public String Username { set; get; } 

    public Int64 RoleId { set; get; } 
} 

public class Role 
{ 
    public Int64 roleId { set; get; } 
    public String roleName { set; get; } 
    public IList<User> listUser { set; get; } 
}  

我有表作爲

Users with id,name,roleId 
Roles with id,name. 

現在我要地圖都使用XML文件。是否可以使用退出的實體映射退出的表。

+1

爲什麼要使用XML文件? EF中常用的映射方式是流暢映射的數據註釋屬性 –

回答

0

在EF中映射的常用方式是數據註釋屬性或流利映射(實際上使用NHibernate流利映射也更好,因爲它爲您提供編譯時檢查)。所以,這裏是你的類流利的映射:

public class UserMapping : EntityTypeConfiguration<User> 
{ 
    public UserMapping() 
    { 
     ToTable("Users"); // Not necessary, EF will use this mapping by default 
     HasKey(u => u.userId); 
     Property(u => u.userId).HasColumnName("id"); 
     Property(u => u.Username).HasColumnName("name"); 
     Property(u => u.RoleId).HasColumnName("roleId"); 
    } 
} 

public class RoleMapping : EntityTypeConfiguration<Role> 
{ 
    public RoleMapping() 
    { 
     ToTable("Roles"); // Not necessary, EF will use this mapping by default 
     HasKey(r => r.roleId); 
     Property(r => r.roleId).HasColumnName("id"); 
     Property(r => r.roleName).HasColumnName("name");    

     HasMany(r => r.listUser) 
      .WithRequired() 
      .HasForeignKey(u => u.RoleId); 
    } 
} 

只需提供這些映射到你的DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configurations.Add(new UserMapping()); 
    modelBuilder.Configurations.Add(new RoleMapping());    

    base.OnModelCreating(modelBuilder); 
} 

我建議你閱讀MSDN文章Configuring/Mapping Properties and Types with the Fluent API

備註 - 另一篇文章是Naming Guidelines,尤其是它的大寫樣式部分。