• dotnetcore EF 使用外键值但不引入join子句


    某些情况下,出于性能考虑,我们需要外键的id值,但不想使用join子句把引用类型都读进来。

        class Book
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Author { get; set; }
            public int Age { get; set; }
            public Person Owner { get; set; }
            public int OwnerId { get; set; }  // 引入这个OwnerId, 等于Owner.Id
    
            public override string ToString()
            {
                return $"name:{Name}, author:{Author}, owner:{Owner.Name}";
            }
        }
    
        class BookConfig : IEntityTypeConfiguration<Book>
        {
            public void Configure(EntityTypeBuilder<Book> builder)
            {
                builder.ToTable("Book");
                // nvarchar is changed to varchar, but length is decided by HasMaxLength(50).
                builder.Property(e => e.Name).HasColumnType("nvarchar(80)").HasMaxLength(50).IsRequired();
                builder.Property(e => e.Author).HasColumnName("author_name").HasMaxLength(100).IsRequired();
    
                builder.Ignore(e => e.Age);
    
                // 使用HasForeignKey()
                builder.HasOne<Person>(b => b.Owner).WithMany(p => p.Books).HasForeignKey(b => b.OwnerId).IsRequired();
            }
        }
    
            private static Task ReadPartial(MyDbContext ctx)
            {
                // sql becomes: select id, name from book.
                var book = ctx.Books.Select(b => new { b.Id, b.Name }).First();
                Console.WriteLine(book.Name);
    
                // use ownerId to get Owner's id without join sub clause.
                var book2 = ctx.Books.Select(b => new { b.Id, b.Name, b.OwnerId }).FirstOrDefault();
                Console.WriteLine(book2.OwnerId);
    
                return Task.CompletedTask;
            }
    

    可以看到上述sql语句没有join子句。

  • 相关阅读:
    「HAOI2015」「LuoguP3178」树上操作(树链剖分
    「LuoguP3865」 【模板】ST表 (线段树
    「LuoguP3384」【模板】树链剖分
    「网络流24题」「Codevs1237」 餐巾计划问题
    「LuoguP1799」 数列_NOI导刊2010提高(06)
    「咕咕网校
    「数论」逆元相关
    「SHOI2007」「Codevs2341」 善意的投票(最小割
    「BZOJ3438」小M的作物(最小割
    「NOIP2005」「Codevs1106」篝火晚会
  • 原文地址:https://www.cnblogs.com/mryux/p/15855620.html
Copyright © 2020-2023  润新知