You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework无法返回关联实体:User中Person始终为Null

问题:EF无法生成关联查询,User对象的Person始终为Null

从数据库获取关联实体时,Entity Framework无法生成关联查询,User对象中的Person始终为Null。尝试过数据注解和Fluent API调整实体关系,问题仍未解决。

实体类代码

User类

public class User
{
    public Guid Id { get; set; }
    public string Username { get; set; }
    public byte[] Password { get; set; }
    public byte[] Salt { get; set; }
    public UserRole Role { get; set; }
    public Person Person { get; set; }

    public User()
    {
        Id = Guid.NewGuid();
    }
}

Person类

public class Person
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int PersonalIdentificationNumber { get; set; }
    public string PhoneNumber { get; set; }
    public string Email { get; set; }
    public PersonImage PersonImage { get; set; }
    public Address Address { get; set; }
    public User User { get; set; }

    public Person()
    {
        Id = Guid.NewGuid();
    }
}

现有ModelBuilder配置

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    var personEntityTypeBuilder = modelBuilder.Entity<Person>();

    personEntityTypeBuilder
        .HasOne(person => person.User)
        .WithOne(user => user.Person)
        .HasForeignKey<Person>("UserId");
}

当前查询代码及问题表现

使用Include语句尝试关联查询,但未生效,生成的SQL完全没有关联Person表:

_db.Users.Include(u => u.Person).Single(i => i.Id == userId);

EF生成的SQL:

SELECT TOP(2) [u].[Id], [u].[Password], [u].[Role], [u].[Salt], [u].[Username]
FROM [Users] AS [u]
WHERE [u].[Id] = @__userId_0

解决方案

调整Fluent API配置,将Person的Id作为与User关联的外键:

modelBuilder.Entity<Person>()
  .HasOne(person => person.User)
  .WithOne(user => user.Person)
  .HasForeignKey<Person>(person => person.Id);

内容的提问来源于stack exchange,提问作者Smiley_Cat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:06:16