sqlite 列表在EntityFramework实体中如何工作?

gcuhipw9  于 2023-02-09  发布在  SQLite
关注(0)|答案(1)|浏览(133)

我有两个数据模型:

public class Role
{
    int Id;
    string Name;
}

以及

public class User
{
    int Id;
    string Name;
    List<Role> Roles;
}

有我的DbContext:

public class DatabaseContext : DbContext
{
    public DbSet<User> Users => Set<User>();
    public DbSet<Role> Roles => Set<Role>();
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=database.sqlite");
    }
}

但是我有List<Role>的问题,当我从查看器中检查数据库数据时,我看到Users表在用户中没有任何Roles,但是Roles表有属性UserID,它有点工作,但是只有1个id存储在那里,我该如何修复它?
我需要有多个角色和具有其中一些角色的用户

t3irkdon

t3irkdon1#

它有点工作,但只有1个id存储在那里,我怎么能修复它?
这取决于你的实际需求。根据应用程序的要求,通常用户只能被分配一个角色,或者用户和角色之间存在多对多的关系。
如果您希望用户只有一个角色,则应反转关系,即角色具有用户列表:

public class Role
{
    // ...
    public List<User> Users { get; set; } = new();
}

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

对于多对多的情况,有两个主要的选项-在两端指定List,让EF内部创建连接表或显式配置连接表(EF Core docs on many-to-many)。对于第一种情况,您的实体可以如下所示:

public class Role
{
    // ...
    public List<User> Users { get; set; } = new();
}

public class User
{
    public int Id  { get; set; } 
    public string Name { get; set; } 
    public List<Role> Roles { get; set; } = new();
}

相关问题