EF Code First Migrations创建额外的外键

时间:2016-01-07 17:31:10

标签: c# .net entity-framework ef-code-first ef-migrations

我试图创建一个Profile表来与Asp.Net Identity表集成:AspNetUsers。我在EF 6.0中使用Code First Migrations。

这是我的用户类:

public class ApplicationUser : IdentityUser
    {
        public ApplicationUser()
        {

        }


        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public UserStatus Status { get; set; }
        public virtual Profile Profile { get; set; }
    }

这是我的个人资料类:

public class Profile
    {
        public int ID { get; set; }
        public string ApplicationUserID { get; set; }
        public virtual ApplicationUser ApplicationUser { get; set; }
    }

我在DataContext中有配置:

modelBuilder.Entity<Profile>()
                .HasRequired<ApplicationUser>(m => m.ApplicationUser);

奇怪的是,当我运行迁移时,它会在数据库中创建ApplicationUserID和ApplicationUser_Id,而我只想创建ApplicationUserID并将其用作外键列。如果我添加属性AppliationUser_Id,它将添加ApplicationUser_Id1。任何人都知道如何解决这个问题?

我想确保外键位于配置文件表中,即配置文件具有ApplicationUserID列,反之亦然,即我不希望AspNetUsers表具有profile_ID列。

P.S。我使用的是Fluent API,而不是数据注释。

1 个答案:

答案 0 :(得分:1)

如果要配置一对一关系,Entity Framework要求必须将从属主键用作外键。

public class Profile
{
    public string ApplicationUserID { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

现在,关于FK惯例,由于这个限制,因为没有选择,Code First只会为你推断FK。

另一件事是,使用Fluent Api配置一对一关系的正确方法是:

modelBuilder.Entity<Profile>()
            .HasRequired<ApplicationUser>(m => m.ApplicationUser)
            .WithOptional(a=>a.Profile);