.net core 急切加载只在某些结果中出现

.net core 急切加载只在某些结果中出现,.net-core,entity-framework-core,eager-loading,.net-core-3.0,webapi,.net Core,Entity Framework Core,Eager Loading,.net Core 3.0,Webapi,我目前正在使用.NETCore3.0,我正在构建一个WebAPI。 我正在尝试将一些相关数据加载到前端 我有以下类和dbcontext设置 public class EntityCommon { public int Id { get; set; } public DateTime CreatedDatetime { get; set; } } public class UserAmountClaim: EntityCommon

我目前正在使用.NETCore3.0,我正在构建一个WebAPI。 我正在尝试将一些相关数据加载到前端

我有以下类和dbcontext设置

    public class EntityCommon
    {
        public int Id { get; set; }
        public DateTime CreatedDatetime { get; set; }
    }

    public class UserAmountClaim: EntityCommon
    {
        public int UserId { get; set; }
        public AmountClaimType Type { get; set; }
        public int Amount{ get; set; }
        public int? RefereeId { get; set; }
        public AmountClaimStatus Status { get; set; }
        public DateTime? ClaimedDatetime { get; set; }

        [NotMapped]
        public virtual User Referee { get; set; }
    }

    public class User : EntityCommon
    {

        public string Name { get; set; }
        public string Password { get; set; }
        public UserStatus Status { get; set; }


        [NotMapped]
        public virtual UserAmountClaim UserAmountClaim { get; set; }
    }

DbContext

modelbuilder.Entity<UserAmountClaim>().ToTable("UserAmountClaim ", "dbo");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.UserId).HasColumnName("fkUserId");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.RefereeId).HasColumnName("fkRefereeId");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.Type).HasConversion(new EnumToStringConverter<UserAmountClaim>());
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.CreatedDatetime).ValueGeneratedOnAdd();
modelbuilder.Entity<UserAmountClaim>().HasOne(ucc => ucc.Referee).WithOne(user => user.UserAmountClaim);
modelbuilder.Entity<UserAmountClaim>().ToTable("UserAmountClaim ", "dbo");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.UserId).HasColumnName("fkUserId");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.RefereeId).HasColumnName("fkRefereeId");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.Type).HasConversion(new EnumToStringConverter<UserAmountClaim>());
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.CreatedDatetime).ValueGeneratedOnAdd();
modelbuilder.Entity<UserAmountClaim>().HasOne(ucc => ucc.Referee).WithMany(user => user.UserAmountClaim);
以及以下数据

Id  fkUserId    Type                Amount fkRefereeId  Status  ClaimedDateTime  CreatedDatetime
52  1           ReferralCommission  100    2            6       NULL             2020-04-18 15:19:34.203
53  1           ReferralCommission  100    2            6       NULL             2020-04-18 15:19:40.343
54  1           ReferralCommission  100    1            6       NULL             2020-04-18 15:36:44.017
55  1           ReferralCommission  100    1            6       NULL             2020-04-18 15:51:31.757
但是当我执行下面的代码时

var result = _dbContext.UserAmountClaim.Where(x => x.UserId == userId &&
                            x.Status == AmountClaimStatus.PendingUser &&
                            x.Type == AmountClaimType.ReferralCommission)
                            .Include(x => x.Referee)
                            .ToListAsync();
裁判在第一和第三项中缺席


{
    "userId": 1,
    "type": "ReferralCommission",
    "amount": 100,
    "status": "PendingUser",
    "id": 52,
    "createdDatetime": "2020-04-18T15:19:34"
},
{
    "userId": 1,
    "type": "ReferralCommission",
    "amount": 100,
    "refereeId": 2,
    "status": "PendingUser",
    "referee": {
        "id": 2,
        "name": "82109380918",
        "password": "",
        "status": "Valid",
        "createdDatetime": "2020-04-16T17:45:31",
    },
    "id": 53,
    "createdDatetime": "2020-04-18T15:19:40"
},
{
    "userId": 1,
    "type": "ReferralCommission",
    "credit": 100,
    "status": "PendingUser",
    "id": 54,
    "createdDatetime": "2020-04-18T15:36:44"
},
{
    "userId": 1,
    "type": "ReferralCommission",
    "amount": 100,
    "refereeId": 1,
    "status": "PendingUser",
    "referee": {
        "id": 1,
        "name": "31829389031",
        "password": "",
        "status": "Valid",
        "createdDatetime": "2020-04-16T17:45:31",
    },
    "id": 54,
    "createdDatetime": "2020-04-18T15:36:44"
}
这种情况在其他具有类似结构的地方都有发生


任何人都可以告诉我这是什么原因以及如何解决这一问题?

正如@IvanStoev所指出的,设置关系和属性类是一个错误

修改以下工作对我来说

public class User : EntityCommon
{
     public string Name { get; set; }
     public string Password { get; set; }
     public UserStatus Status { get; set; }
     [NotMapped]
     public virtual List<UserAmountClaim> UserAmountClaim { get; set; }
}
公共类用户:EntityCommon
{
公共字符串名称{get;set;}
公共字符串密码{get;set;}
公共用户状态状态{get;set;}
[未映射]
公共虚拟列表UserAmountClaim{get;set;}
}
DbContext

modelbuilder.Entity<UserAmountClaim>().ToTable("UserAmountClaim ", "dbo");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.UserId).HasColumnName("fkUserId");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.RefereeId).HasColumnName("fkRefereeId");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.Type).HasConversion(new EnumToStringConverter<UserAmountClaim>());
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.CreatedDatetime).ValueGeneratedOnAdd();
modelbuilder.Entity<UserAmountClaim>().HasOne(ucc => ucc.Referee).WithOne(user => user.UserAmountClaim);
modelbuilder.Entity<UserAmountClaim>().ToTable("UserAmountClaim ", "dbo");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.UserId).HasColumnName("fkUserId");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.RefereeId).HasColumnName("fkRefereeId");
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.Type).HasConversion(new EnumToStringConverter<UserAmountClaim>());
modelbuilder.Entity<UserAmountClaim>().Property(ucc => ucc.CreatedDatetime).ValueGeneratedOnAdd();
modelbuilder.Entity<UserAmountClaim>().HasOne(ucc => ucc.Referee).WithMany(user => user.UserAmountClaim);
modelbuilder.Entity().ToTable(“UserAmountClaim”、“dbo”);
modelbuilder.Entity().Property(ucc=>ucc.UserId).HasColumnName(“fkUserId”);
modelbuilder.Entity().Property(ucc=>ucc.referedid).HasColumnName(“FKCreferedid”);
modelbuilder.Entity().Property(ucc=>ucc.Type).HasConversion(新的EnumToStringConverter());
modelbuilder.Entity().Property(ucc=>ucc.CreatedDatetime).valueGeneratedAnd();
modelbuilder.Entity();

非常感谢@IvanStoev

为什么您有这些
[未映射]
属性?您的
id
列包含重复项,因此,这种关系不是一对一的。@GertArnold这听起来可能很傻,但我想强调的是,它将从数据库映射中排除它,并提醒我自己或将来维护它的人。@IvanStoev非常感谢!!它在修改dbcontext关系和用户类中的属性后工作。我几乎忘了一对一的关系是如何运作的!再次感谢大家!