Entity framework 将现有实体映射到实体框架中的现有表

Entity framework 将现有实体映射到实体框架中的现有表,entity-framework,c#-4.0,Entity Framework,C# 4.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; } p

是否可以像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; }
}       

现在,我想使用XML文件映射这两个文件。是否可以将现有表与现有实体映射。

您有几个选项:

1通过数据库第一个edmx文件管理映射请参见


2从数据库优先的方法开始,然后转向使用fluent api的代码优先的方法参见EF中通常的映射方式是数据注释属性或fluent映射实际上使用NHibernate fluent映射也更好,因为它提供了编译时检查。因此,这里是您的类的流畅映射:

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);
    }
}
我建议你阅读MSDN的文章


旁注-另一篇文章是,特别是它的大写样式部分。

为什么要使用XML文件?EF中常用的映射方式是fluent映射的数据注释属性
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);
    }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new UserMapping());
    modelBuilder.Configurations.Add(new RoleMapping());               

    base.OnModelCreating(modelBuilder);
}