1

好的,让我先解释一下这不是我的代码。我从另一名员工那里接手了一个项目。无论如何,这个项目使用的是 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) 的外键列,所以我收到了 Invalid Column Name 错误。

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

4

1 回答 1

1

由于您说 User 表上没有 UserProfileId ,因此您定义的是 1:1 关系,其中 User 和 UserProfile 表共享一个主键对吗?

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

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

这将生成一个这样的数据库:

在此处输入图像描述

于 2012-09-07T00:49:01.560 回答