加载表格时如何立即加载导航

问题描述 投票:0回答:1

我有两个类:User 和 Ticket,以及 DBContext

    public class Ticket
    {
        public long Id { get; set; }
        public string Text { get; set; }
        public DateTime Date { get; set; }

        public long UserId { get; set; }       
        public User User { get; set; } = null!;
    }

    public class User
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public string PasswordHash { get; set; }
    }

    public class Database : DbContext
    {
        public Database() { }

        public Database(DbContextOptions<Database> options) : base(options)
        {
        }

        public DbSet<Ticket> Tickets { get; set; }

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

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySQL("server=server;port=port;user=user;password=password;database=mydb");
        }
    }

并且MySQL中有两张表对应的字段。我需要在用户和票证表之间建立一对多关系。 Ticket 类中的 UserId 是 tickets 表中的 ForeignKey,引用 id 属性上的 users 表。

public User User
是一个导航属性。

我需要调用

context.Tickets.Include(t => t.User)
使
User
类中的
Ticket
非空(在启动时 User 的值为空),但是
UserId
在调用之前已经有一个值。我可以这样做,以便立即定义
User
并且我不需要调用
context.Tickets.Include(t => t.User)
吗?

我尝试直接使用link中描述的方法设置表之间的链接,但是没有用。

c# mysql entity-framework
1个回答
0
投票

解决方案 1:你需要主动延迟加载

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseLazyLoadingProxies();
        optionsBuilder.UseMySQL("..")
    }

解决方案 2:使用 AutoInclude

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Ticket>()
          .Navigation(e => e.User)
           .AutoInclude();
}
© www.soinside.com 2019 - 2024. All rights reserved.