2014-02-26 56 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,尤其是它的大写样式部分。