gpt4 book ai didi

.net-core - EF Core 3.1.4 导航属性在一对一关系中返回 null

转载 作者:行者123 更新时间:2023-12-05 02:54:04 25 4
gpt4 key购买 nike

我遇到一个问题,在 EF Core 3.1.4 中,导航属性总是在一对一关系中返回 null。

我的模型结构如下:

    public class UserCredential
{
public Guid Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public byte[] Salt { get; set; }
public bool IsLocked { get; set; }
public bool IsDeleted { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime? ModifiedDate { get; set; }
public DateTime? DeletedDate { get; set; }

public UserProfile UserProfile { get; set; }
}

public class UserProfile
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string Suffix { get; set; }
public bool IsDeleted { get; set; }
public List<Address> Addresses {get;set;}
public DateTime DOB { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime? ModifiedDate { get; set; }
public DateTime? DeletedDate { get; set; }

public Guid UserCredentialId { get; set; }
public UserCredential UserCredential { get; set; }
}

根据我的理解,这应该足以让 EF Core 推断一对一关系。但它没有用,所以我在我的 dbContext 中定义了 relationshup,如下所示:

        protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

builder.Entity<UserProfile>(entity =>
{
entity.HasOne(up => up.UserCredential)
.WithOne(uc => uc.UserProfile)
.HasForeignKey<UserProfile>( up => up.UserCredentialId);
});
}

我检查了数据库,表中定义了一个来自 UserProfile -> UserCredentials 的外键。同样,两个表都将 Id 作为主键。

如果我将数据发布到“addUser”端点,它将被正确添加到数据库中。

{
"username": "test3",
"password": "password123",
"UserProfile":{
"FirstName": "John",
"LastName": "Doe"
}
}

Db Screenshot

但是,我的模型中的“UserProfile”始终为空。

System.NullReferenceException: 'Object reference not set to an instance of an object.' IronCarp.Identity.Models.UserCredential.UserProfile.get returned null.

我正在使用一个存储库与数据库交互,返回我的数据/模型的方法看起来很简单。

        private async Task<UserCredential> GetUserCredentials(string username)
{
return await context.UserCredentials.Where(u => u.Username == username).FirstOrDefaultAsync();
}

感谢任何帮助,我不确定我错过了什么,谢谢!

最佳答案

尝试在 linkq 中包含导航属性,尝试这样的事情:

private async Task<UserCredential> GetUserCredentials(string username)
{
return await context.UserCredentials.Include(x => x.UserProfile).Where(u => u.Username == username).FirstOrDefaultAsync();
}

关于.net-core - EF Core 3.1.4 导航属性在一对一关系中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61974614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com