Entity framework DbSet Find方法返回null

Entity framework DbSet Find方法返回null,entity-framework,dbcontext,Entity Framework,Dbcontext,在下面的代码中,user1的值为null,而user2的值不为null。我正在调试第一行,我看到它从用户db获取值并开始设置它们,但由于某些原因,我得到了null using (var scope = _scopeFactory.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService<DBContext>(); User user1 = dbContext.Users.Find

在下面的代码中,user1的值为null,而user2的值不为null。我正在调试第一行,我看到它从用户db获取值并开始设置它们,但由于某些原因,我得到了null

using (var scope = _scopeFactory.CreateScope())
{
    var dbContext = scope.ServiceProvider.GetRequiredService<DBContext>();
    User user1 = dbContext.Users.Find(id);
    User user2 = dbContext.Users.FirstOrDefault(c => c.Id.Value == id.Value);
} 
已更新

我正在使用EF core,我的配置是:

用户地图

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

        builder
            .Property(c => c.Id)
            .HasColumnType("nvarchar(40)")
            .HasConversion(
                v => v.Value,
                v => new UserId(v)
            )
            .IsRequired();

        builder
            .Property(c => c.Email)
            .HasColumnType("nvarchar(60)")
            .HasConversion(
                v => v.Value,
                v => new UserEmail(v)
            )
            .IsRequired();
    }
}
公共类用户映射:IEntityTypeConfiguration
{
公共void配置(EntityTypeBuilder)
{
HasKey(c=>c.Id);
建设者
.Property(c=>c.Id)
.HasColumnType(“nvarchar(40)”)
.哈斯转换(
v=>v.值,
v=>newuserid(v)
)
.IsRequired();
建设者
.Property(c=>c.Email)
.HasColumnType(“nvarchar(60)”)
.哈斯转换(
v=>v.值,
v=>新用户电子邮件(v)
)
.IsRequired();
}
}
背景:

public class DBContext : DbContext
{
    public DBContext(DbContextOptions opt) : base(opt) { }

    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new UserMap());
        base.OnModelCreating(modelBuilder);
    }
}
公共类DBContext:DBContext
{
公共DBContext(DbContextOptions opt):基(opt){}
公共数据库集用户{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
ApplyConfiguration(newusermap());
基于模型创建(modelBuilder);
}
}

Id属性和Id变量的类型是什么?@IvanStoev Id和Id是一个valueobject很可能就是问题所在。EF在第一种情况下可能无法生成正确的SQL(当实体不在缓存中并且必须从数据库中检索时)。在第二种情况下,对象已经在内存中,并且找到了密钥。如何使用值转换器映射值对象?请附上小而全的复印件。并指定所用EF的类型和版本(EF6或EF Core)。@IvanStoev我刚刚更新了描述。我认为SQL是正确的,因为调试时我可以看到它是如何从数据库中检索数据并为用户设置数据的,但由于某些原因,我得到了null对象。在EF Core 3.1.10中尝试了类似的方法,但无法复制
Find
按预期工作,并且
FirstOrDefault
生成异常,表示表达式
。其中(c=>c.Id.Value==\uid\uvalue\u0)
无法翻译。
public class UserMap : IEntityTypeConfiguration<User>
{
    public void Configure(EntityTypeBuilder<User> builder)
    {
        builder.HasKey(c => c.Id);

        builder
            .Property(c => c.Id)
            .HasColumnType("nvarchar(40)")
            .HasConversion(
                v => v.Value,
                v => new UserId(v)
            )
            .IsRequired();

        builder
            .Property(c => c.Email)
            .HasColumnType("nvarchar(60)")
            .HasConversion(
                v => v.Value,
                v => new UserEmail(v)
            )
            .IsRequired();
    }
}
public class DBContext : DbContext
{
    public DBContext(DbContextOptions opt) : base(opt) { }

    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new UserMap());
        base.OnModelCreating(modelBuilder);
    }
}