EF Core 3.1 拥有的实体在查询数据库时返回空对象

问题描述 投票:0回答:2

我有一个

User
类,它有一个拥有的实体
PersonalInformation
,其中包含
FirstName
LastName
PhoneNumber
等属性。

User
类是一个表,其
Id
是从另一个包含所有登录信息的登录数据库
AspNetUsers
中提取的。

当我尝试从数据库中读取时,

PersonalInformation
对象始终是
null
,即使数据存在于数据库中。这是课程

public class User
{
    public string Id { get; set; }
    public PersonalInformation PersonalInformation { get; set; }
}

public class PersonalInformation
{
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string MobilePhone { get; set; }
    public string HomePhone { get; set; }
    public string WorkPhone { get; set; }
    public string OtherPhone { get; set; }
    public DateTime DateOfBirth { get; set; }
}

这是配置

public class UserConfiguration : IEntityTypeConfiguration<User>
{
    public void Configure(EntityTypeBuilder<User> builder)
    {
        builder.HasKey(x => x.Id);

        builder.OwnsOne(x => x.PersonalInformation, pi =>
        {
            pi.Property(x => x.FirstName).HasMaxLength(25);
            pi.Property(x => x.MiddleName).HasMaxLength(25);
            pi.Property(x => x.LastName).HasMaxLength(25);
            pi.Property(x => x.MobilePhone).HasMaxLength(15);
            pi.Property(x => x.HomePhone).HasMaxLength(15);
            pi.Property(x => x.OtherPhone).HasMaxLength(15);
            pi.Property(x => x.WorkPhone).HasMaxLength(15);
        });

        builder.Property(x => x.CreatedBy).HasMaxLength(36);
        builder.Property(x => x.LastModifiedBy).HasMaxLength(36);

    }
}

Here's an image of the database table we're pulling from

这是对用户表的调用

var user = await context.Users
    .FindAsync(_currentUserService.UserId);

我也尝试过这个

var user = await context.Users
    .Include(x => x.PersonalInformation)
    .FirstOrDefaultAsync(x => x.Id == _currentUserService.UserId);

当我在调试器中检查用户时,我看到

User.PersonalInformation
null
,即使数据库中有数据。

我在这里寻找有类似问题的人,他们提出了以下建议。每个都没有解决我的问题:

  1. WithOwner()
    添加到
    UserConfiguration
    课程
  2. virtual
    添加到
    PersonalInformation
    类上的
    User
    (就好像它是导航属性)
  3. 添加
    Include
    +
    FirstOrDefaultAsync()
    进行查询(就好像它是导航属性)
  4. 升级到最新版本的 EF Core(截至本文为 3.1.6)
c# entity-framework ef-core-3.1 owned-types
2个回答
1
投票

我发现了问题。数据库中的

DateTime DateOfBirth
为 null,导致整个对象为 null。一旦我在数据库中提供了一个值,它就会按预期工作


0
投票

我遇到了同样的问题,并通过显式包含相关对象(使用急切加载)来修复它https://learn.microsoft.com/en-us/ef/core/querying/lated-data/

© www.soinside.com 2019 - 2024. All rights reserved.