Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 使用FluentAPI的EF Core中的一对一关系_Asp.net Core_Entity Framework Core_One To One - Fatal编程技术网

Asp.net core 使用FluentAPI的EF Core中的一对一关系

Asp.net core 使用FluentAPI的EF Core中的一对一关系,asp.net-core,entity-framework-core,one-to-one,Asp.net Core,Entity Framework Core,One To One,我在数据库中实现了1对1关系,但对FK对象的引用为null 我将向您展示一些代码,因为这样更容易解释 我有以下型号: User.cs public class User { public int Id { get; set; } public string Username { get; set; } public RefreshToken RefreshToken { get; set; } } RefreshToken.cs public class Refres

我在数据库中实现了1对1关系,但对FK对象的引用为null

我将向您展示一些代码,因为这样更容易解释

我有以下型号:

User.cs

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }

    public RefreshToken RefreshToken { get; set; }
}
RefreshToken.cs

public class RefreshToken : Trackable
{
    public string Token { get; set; }
    public DateTime ExpiresOn { get; set; }


    public int UserRef { get; set; }
    public User User { get; set; }
}
然后在onModelCreating函数中,我使用FluentAPI定义了以下内容

        modelBuilder.Entity<User>()
            .HasOne(a => a.RefreshToken)
            .WithOne(b => b.User)
            .HasForeignKey<RefreshToken>(b => b.UserRef);

        modelBuilder.Entity<RefreshToken>().HasKey(u => u.UserRef);
modelBuilder.Entity()
.HasOne(a=>a.RefreshToken)
.WithOne(b=>b.User)
.HasForeignKey(b=>b.UserRef);
modelBuilder.Entity().HasKey(u=>u.UserRef);
数据库中的所有内容都按照我的预期创建

如果我使用以下代码请求用户

        _dbContext.Set<User>().Find(id);
\u dbContext.Set().Find(id);
属性RefreshToken为空

我在代码中遗漏了什么


注意:如果我首先请求RefreshToken,然后请求用户刷新Token,则属性设置正确。

默认情况下,entity framework中的“急切加载”处于禁用状态。否则,当只获取一条记录时,我们将最终获取大量数据集。 因此,如果您想加载导航属性以及记录,您必须显式地包含它们

_dbContext.Set<User>().FirstOrDefault(u => u.Id == id);
\u dbContext.Set().FirstOrDefault(u=>u.Id==Id);
注意:如果我先请求RefreshToken,然后请求用户 然后正确设置属性


这是因为当您在用户之前加载RefreshToken时,RefreshToken会缓存在数据上下文中。然后,在获取用户时,EF使用缓存中的对象设置Refreshtoken。它没有将刷新令牌与用户记录一起提取。

关系配置正常。你缺少的是。