为什么代码首次迁移会更改表名?

时间:2016-10-07 12:30:24

标签: asp.net-mvc entity-framework asp.net-mvc-5 ef-code-first

我正试图建立一个关键的关系(一个---到多个)

让applicationUser对现有人员表有一个foreinKey。

我的代码。

public class ApplicationUser : IdentityUser
{

    [Required]
    public long PersonId { get; set; }

    //[Required]
    [ForeignKey("PersonId")]
    public virtual Person Person { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}

人员表(存在于db中)

public class Person
{
    [System.ComponentModel.DataAnnotations.KeyAttribute()]
    [System.ComponentModel.DataAnnotations.Schema.DatabaseGe‌​nerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGen‌​eratedOption.None)]
    public long PersonId { get; set; }

    public virtual ICollection<ApplicationUser> Users { get; set; }
}

问题

使用迁移时,我得到以下内容。

up方法:

        CreateTable(
            "dbo.People",
            c => new
                {
                    PersonId = c.Long(nullable: false),
                })
            .PrimaryKey(t => t.PersonId);

向下方法:

    public override void Down()
    {
        DropForeignKey("dbo.AspNetUsers", "PersonId", "dbo.People");
        DropIndex("dbo.AspNetUsers", new[] { "PersonId" });

        DropTable("dbo.People");

    }

dbo.People来自哪里?我想去db.Person这是一个已经创建的表(通过sql)。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

默认情况下,Entity Framework将实体名称复数化以命名DB表。您可以通过添加以下代码在OnModelCreating方法中关闭此行为:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();