ASP Identity用户与其他表之间的实体框架映射 - 更改Id列

时间:2014-06-29 09:54:42

标签: c# asp.net entity-framework entity-framework-6 asp.net-identity

我的应用中有一个标准Identity用户...

public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{...

...其中Id为主键。 如何将Id更改为UserId?
我问这个是因为我有一个应该与AspNetUsers表连接的表。 我这样做了:

public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{...
public virtual ICollection<JobApply> JobApplies { get; set; }

JobApply代码是:

public class JobApply
{...
public int ApplicationUserId { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }

结果如下:
enter image description here
我想以某种方式使这更好。
我希望UserId代替Id,因此两个表中的列都是UserId的名称 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

您无法更改名称。 Id在IUser<T>的扩展系统的最底部定义,所有IdentityUser实现必须最终继承。

如果不重写所有内容,就无法做到。

您可以更改存储在数据库中的字段名称,但不能更改代码中使用的属性名称。如果您只想更改数据库中列的名称,则只需使用FluentConfiguration来更改属性的名称。

编辑:

在ApplicationContext中,您可以这样做:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<ApplicationUser>()
        .Property(p => p.Id)
        .HasColumnName("UserId");
}