标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。