我有一个
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);
}
}
这是对用户表的调用
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
,即使数据库中有数据。
我在这里寻找有类似问题的人,他们提出了以下建议。每个都没有解决我的问题:
WithOwner()
添加到 UserConfiguration
课程virtual
添加到 PersonalInformation
类上的 User
(就好像它是导航属性)Include
+ FirstOrDefaultAsync()
进行查询(就好像它是导航属性)我发现了问题。数据库中的
DateTime DateOfBirth
为 null,导致整个对象为 null。一旦我在数据库中提供了一个值,它就会按预期工作
我遇到了同样的问题,并通过显式包含相关对象(使用急切加载)来修复它https://learn.microsoft.com/en-us/ef/core/querying/lated-data/