在实体框架中映射具有现有表的现有实体

时间:2014-02-26 09:50:26

标签: 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; }
    public String roleName { set; get; }
    public IList<User> listUser { set; get; }
}       

我将表格作为

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

现在我想使用XML文件映射两者。是否可以使用现有实体映射现有表。

2 个答案:

答案 0 :(得分:0)

您有几个选择:

1)通过数据库第一个edmx文件管理你的映射(见http://www.asp.net/mvc/tutorials/mvc-5/database-first-development/creating-the-web-application

2)从数据库第一种方法开始,然后使用流畅的api(见http://agilenet.wordpress.com/2011/04/11/entity-framework-4-1-rc-with-an-existing-database/

首先转到代码。

答案 1 :(得分: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,特别是它的大写样式部分。