如何在EF(代码优先)中映射外键ID?

时间:2012-09-06 22:07:24

标签: entity-framework ef-code-first

好的,我先解释一下,这不是我的代码。我正在接管另一名员工的项目。无论如何,这个项目正在使用Code First。我正在解决性能问题,但我遇到了一个奇怪的错误。

我基本上有两个映射类来处理。我会简短地编写简短的版本。

public class User
{
    public int UserId { get; set; } //primary key
    //attributes here, not important

    public int UserProfileId { get; set; } //foreign key id *i added this*
    public UserProfile UserProfile { get; set; } //foreign key *i added this*
}

public class UserProfile
{
    public int Id { get; set; } //primary key
    //attributes here, not important
}

现在,这是一个非常标准的外键关系。但是,有一个警告。这些表正从旧表中下拉,如下所示:

modelBuilder.Entity<User>().ToTable("application_user");

然后,使用名称将每个列映射到拉出表的列。 但是,我正在尝试将这两个表合并为一对一关系,如下所示:

modelBuilder.Entity<User>().HasRequired(x => x.UserProfile)
            .WithMany()
            .HasForeignKey(u => u.UserProfileId); //ERROR HERE - THIS COLUMN DOES NOT EXIST IN THE ORIGINAL TABLE

现在,就我所知,错误是在PREVIOUS表中,没有(UserProfileId)的外键列,所以我收到一个无效的列名错误。

有没有办法我可以不映射外键id列并仍然保持一对一的关系?

1 个答案:

答案 0 :(得分:1)

既然您说User表上没有UserProfileId,那么您定义的是1:1关系,其中User和UserProfile表共享主键是否正确?

如果是这样,你可以像这样映射:

     modelBuilder.Entity<User>()
        .HasRequired(u => u.UserProfile)
        .WithRequiredPrincipal();

,这将生成如下数据库:

enter image description here