EF Core包含查询

帕拉科帕

我正在尝试将用户实体保存到带有SQLite的EFCore中的Room实体中。保存更改后,我立即再次查询数据库以获取会议室实体中用户的更新列表。当前,它返回0个用户,如果我在运行该查询并查看数据库表后在断点处停止代码,则可以看到用户与正确的Room关联,但是我仍然得到0个结果。我很好奇我的设计是否存在问题?我需要将用户链接到房间的东西吗?

返回0个用户的代码-

public async Task<ServiceResponse<MatchRoom>> RegisterUser(AppState state)
{
    //Update the db with connection ID incase we need it later
    var update = _context.Update(state.user);
    if (update != null)
    {
        //The user object is saved here
        await _context.SaveChangesAsync();
        //Here I query a room, that the user is assigned to, but get nothing.
        var room = _context.MatchRooms.Include("Users");
}

我有以下dbcontext

public class DataContext : DbContext
{
    public DataContext(DbContextOptions<DataContext> options) : base(options)
    {
        //
    }
    
    public DbSet<User> Users { get; set; }
    public DbSet<MatchRoom> MatchRooms { get; set; }
    public DbSet<Message> Messages { get; set; }
    
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MatchRoom>()
            .HasMany<User>(u => u.Users);
            
        modelBuilder.Entity<MatchRoom>()
            .HasMany<Message>(m => m.Messages);
            
        modelBuilder.Entity<Message>()
            .HasOne<User>(r => r.SentBy);
    }    
}

public class MatchRoom
{
    public int MatchRoomId { get; set; }
    public string MatchRoomCode { get; set; }
    [ValidateComplexType]
    public List<User> Users { get; set; } = new List<User>();
    public User CreatedBy { get; set; }
    public List<Message> Messages { get; set; }
}

public class User
{
    public int UserId { get; set; }
    public string UserCode { get; set; }
    [Required(ErrorMessage ="You must specify a username")]
    [StringLength(20,MinimumLength=1,ErrorMessage="Please enter a username no longer than 20 characters")]
    public string Username { get; set; }
    public string ConnectionId { get; set; }
}

public class Message
{
    public int MessageId { get; set; }
    public string Text { get; set; }
    public User SentBy { get; set; }
}

码 D b

阿提亚尔

您仅声明查询,而不执行查询。

更改以下行-

var room = _context.MatchRooms.Include("Users");

至 -

var room = await _context.MatchRooms.Include(p=> p.Users).ToListAsync();

这将为您提供所有列表MatchRoom及其相关User列表。

不确定如何查询已保存用户所分配到的房间,因为我在User中看不到任何MatchRoomId可用于过滤查询的外键属性我想,现在它们正在由EF生成的影子密钥处理。

User课堂上声明外键属性-

public int MatchRoomId { get; set; }

然后,您可以查询一个房间,将已保存的用户分配为-

var room = await _context.MatchRooms.Include(p=> p.Users).FirstOrDefaultAsync(p=> p.MatchRoomId == state.user.MatchRoomId)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF Core 在使用连接查询后包含子项

来自分类Dev

查询EF Core身份角色

来自分类Dev

EF Core-复杂查询

来自分类Dev

EF Core .ThenInclude不包含外部实体,导致查询不检索任何内容

来自分类Dev

EF Core 3.1:Sequence中不包含任何元素,可以使用FromSqlRaw查询存储过程

来自分类Dev

EF Core - 在列表查询结果中包含对话中的最新消息

来自分类Dev

EF Core 2.1 Linq查询到EF Core 3.0

来自分类Dev

EF Core动态包含和订购

来自分类Dev

使用String.Contains的EF Core查询

来自分类Dev

EF Core:更新实体而不先查询

来自分类Dev

EF Core Linq上的子查询总和

来自分类Dev

EF Core:如何查询SQL视图

来自分类Dev

带Like子句的EF Core原始查询

来自分类Dev

如何使用Ef Core异步查询数据?

来自分类Dev

在 Linq 查询 EF Core 中使用 Like

来自分类Dev

EF Core 3,优化很多包含/然后包含

来自分类Dev

使用任何而不是包含来优化EF查询

来自分类Dev

包含不包括关系的 EF 6 复杂查询

来自分类Dev

查找并包含EF 6

来自分类Dev

如何使用我自己的方法或编写DbFunction进行EF Core查询(EF Core 3.0)

来自分类Dev

有条件地包含在EF Core中

来自分类Dev

EF Core 3.1不允许包含对Enum属性的搜索

来自分类Dev

在 EF Core 的集合中包含每个项目的属性

来自分类Dev

EF核心关系查询

来自分类Dev

EF扩展个案查询

来自分类Dev

EF扩展个案查询

来自分类Dev

使EF生成的查询高效

来自分类Dev

LINQ to EF子查询

来自分类Dev

重构EF查询的提示