ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-29 19:00:55  阅读:116  来源: 互联网

标签:set join Name get builder 键值 子句 OwnerId public


某些情况下,出于性能考虑,我们需要外键的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子句。

标签:set,join,Name,get,builder,键值,子句,OwnerId,public
来源: https://www.cnblogs.com/mryux/p/15855620.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有