Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion AuthorDTO.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ public class AuthorDTO
public string UserEmail { get; set; }
public string UserName { get; set; }
public int UserId { get; set; }
public int AuthorId { get; set; }
public int Id { get; set; }
public int RoleId { get; set; }
public int BooksCount { get; set; }
Expand All @@ -22,4 +21,18 @@ public class AuthorDTO
public string AuthorCountry { get; set; }
public string AuthorNickName { get; set; }
}

public sealed class AuthorDtoOptimized
{
public string UserFirstName { get; set; }
public string UserLastName { get; set; }
public string UserEmail { get; set; }
public string UserName { get; set; }
public int BooksCount { get; set; }
public ICollection<BookDtoOptimized> Books { get; set; }
public int Age { get; set; }
public string Country { get; set; }
}

public sealed record AuthorRecordDto(int Age, string Country, int BooksCount, string UserName, string FirstName, string LastName, string Email, ICollection<BookRecordDto> Books);
}
736 changes: 689 additions & 47 deletions BenchmarkService.cs

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions BookDto.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,12 @@ public class BookDto
public string PublisherName { get; set; }
public string ISBN { get; set; }
}

public sealed class BookDtoOptimized
{
public string Name { get; set; }
public int PublishedYear { get; set; }
}

public sealed record BookRecordDto(string Name, int PublishedYear);
}
29 changes: 29 additions & 0 deletions CompiledModels/AppDbContextModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// <auto-generated />
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using OptimizeMePlease.Context;

#pragma warning disable 219, 612, 618
#nullable disable

namespace CompiledModels
{
[DbContext(typeof(AppDbContext))]
public partial class AppDbContextModel : RuntimeModel
{
static AppDbContextModel()
{
var model = new AppDbContextModel();
model.Initialize();
model.Customize();
_instance = model;
}

private static AppDbContextModel _instance;
public static IModel Instance => _instance;

partial void Initialize();

partial void Customize();
}
}
40 changes: 40 additions & 0 deletions CompiledModels/AppDbContextModelBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;

#pragma warning disable 219, 612, 618
#nullable disable

namespace CompiledModels
{
public partial class AppDbContextModel
{
partial void Initialize()
{
var author = AuthorEntityType.Create(this);
var book = BookEntityType.Create(this);
var publisher = PublisherEntityType.Create(this);
var role = RoleEntityType.Create(this);
var user = UserEntityType.Create(this);
var userRole = UserRoleEntityType.Create(this);

AuthorEntityType.CreateForeignKey1(author, user);
BookEntityType.CreateForeignKey1(book, author);
BookEntityType.CreateForeignKey2(book, publisher);
UserRoleEntityType.CreateForeignKey1(userRole, role);
UserRoleEntityType.CreateForeignKey2(userRole, user);

AuthorEntityType.CreateAnnotations(author);
BookEntityType.CreateAnnotations(book);
PublisherEntityType.CreateAnnotations(publisher);
RoleEntityType.CreateAnnotations(role);
UserEntityType.CreateAnnotations(user);
UserRoleEntityType.CreateAnnotations(userRole);

AddAnnotation("ProductVersion", "6.0.9");
AddAnnotation("Relational:MaxIdentifierLength", 128);
AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
}
}
}
110 changes: 110 additions & 0 deletions CompiledModels/AuthorEntityType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
// <auto-generated />
using System;
using System.Reflection;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using OptimizeMePlease.Entities;

#pragma warning disable 219, 612, 618
#nullable disable

namespace CompiledModels
{
internal partial class AuthorEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"OptimizeMePlease.Entities.Author",
typeof(Author),
baseEntityType);

var id = runtimeEntityType.AddProperty(
"Id",
typeof(int),
propertyInfo: typeof(Author).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Author).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw);
id.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

var age = runtimeEntityType.AddProperty(
"Age",
typeof(int),
propertyInfo: typeof(Author).GetProperty("Age", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Author).GetField("<Age>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
age.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var booksCount = runtimeEntityType.AddProperty(
"BooksCount",
typeof(int),
propertyInfo: typeof(Author).GetProperty("BooksCount", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Author).GetField("<BooksCount>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
booksCount.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var country = runtimeEntityType.AddProperty(
"Country",
typeof(string),
propertyInfo: typeof(Author).GetProperty("Country", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Author).GetField("<Country>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
country.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var nickName = runtimeEntityType.AddProperty(
"NickName",
typeof(string),
propertyInfo: typeof(Author).GetProperty("NickName", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Author).GetField("<NickName>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
nickName.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var userId = runtimeEntityType.AddProperty(
"UserId",
typeof(int),
propertyInfo: typeof(Author).GetProperty("UserId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Author).GetField("<UserId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
userId.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);

var index = runtimeEntityType.AddIndex(
new[] { userId });

return runtimeEntityType;
}

public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType)
{
var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("UserId") },
principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }),
principalEntityType,
deleteBehavior: DeleteBehavior.Cascade,
required: true);

var user = declaringEntityType.AddNavigation("User",
runtimeForeignKey,
onDependent: true,
typeof(User),
propertyInfo: typeof(Author).GetProperty("User", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Author).GetField("<User>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));

return runtimeForeignKey;
}

public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", null);
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "Authors");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);

Customize(runtimeEntityType);
}

static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}
139 changes: 139 additions & 0 deletions CompiledModels/BookEntityType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
// <auto-generated />
using System;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using OptimizeMePlease.Entities;

#pragma warning disable 219, 612, 618
#nullable disable

namespace CompiledModels
{
internal partial class BookEntityType
{
public static RuntimeEntityType Create(RuntimeModel model, RuntimeEntityType baseEntityType = null)
{
var runtimeEntityType = model.AddEntityType(
"OptimizeMePlease.Entities.Book",
typeof(Book),
baseEntityType);

var id = runtimeEntityType.AddProperty(
"Id",
typeof(int),
propertyInfo: typeof(Book).GetProperty("Id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Book).GetField("<Id>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
valueGenerated: ValueGenerated.OnAdd,
afterSaveBehavior: PropertySaveBehavior.Throw);
id.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

var authorId = runtimeEntityType.AddProperty(
"AuthorId",
typeof(int),
propertyInfo: typeof(Book).GetProperty("AuthorId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Book).GetField("<AuthorId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
authorId.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var iSBN = runtimeEntityType.AddProperty(
"ISBN",
typeof(string),
propertyInfo: typeof(Book).GetProperty("ISBN", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Book).GetField("<ISBN>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
iSBN.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var name = runtimeEntityType.AddProperty(
"Name",
typeof(string),
propertyInfo: typeof(Book).GetProperty("Name", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Book).GetField("<Name>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly),
nullable: true);
name.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var published = runtimeEntityType.AddProperty(
"Published",
typeof(DateTime),
propertyInfo: typeof(Book).GetProperty("Published", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Book).GetField("<Published>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
published.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var publisherId = runtimeEntityType.AddProperty(
"PublisherId",
typeof(int),
propertyInfo: typeof(Book).GetProperty("PublisherId", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Book).GetField("<PublisherId>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));
publisherId.AddAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.None);

var key = runtimeEntityType.AddKey(
new[] { id });
runtimeEntityType.SetPrimaryKey(key);

var index = runtimeEntityType.AddIndex(
new[] { authorId });

var index0 = runtimeEntityType.AddIndex(
new[] { publisherId });

return runtimeEntityType;
}

public static RuntimeForeignKey CreateForeignKey1(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType)
{
var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("AuthorId") },
principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }),
principalEntityType,
deleteBehavior: DeleteBehavior.Cascade,
required: true);

var author = declaringEntityType.AddNavigation("Author",
runtimeForeignKey,
onDependent: true,
typeof(Author),
propertyInfo: typeof(Book).GetProperty("Author", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Book).GetField("<Author>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));

var books = principalEntityType.AddNavigation("Books",
runtimeForeignKey,
onDependent: false,
typeof(List<Book>),
propertyInfo: typeof(Author).GetProperty("Books", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Author).GetField("<Books>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));

return runtimeForeignKey;
}

public static RuntimeForeignKey CreateForeignKey2(RuntimeEntityType declaringEntityType, RuntimeEntityType principalEntityType)
{
var runtimeForeignKey = declaringEntityType.AddForeignKey(new[] { declaringEntityType.FindProperty("PublisherId") },
principalEntityType.FindKey(new[] { principalEntityType.FindProperty("Id") }),
principalEntityType,
deleteBehavior: DeleteBehavior.Cascade,
required: true);

var publisher = declaringEntityType.AddNavigation("Publisher",
runtimeForeignKey,
onDependent: true,
typeof(Publisher),
propertyInfo: typeof(Book).GetProperty("Publisher", BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: typeof(Book).GetField("<Publisher>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly));

return runtimeForeignKey;
}

public static void CreateAnnotations(RuntimeEntityType runtimeEntityType)
{
runtimeEntityType.AddAnnotation("Relational:FunctionName", null);
runtimeEntityType.AddAnnotation("Relational:Schema", null);
runtimeEntityType.AddAnnotation("Relational:SqlQuery", null);
runtimeEntityType.AddAnnotation("Relational:TableName", "Books");
runtimeEntityType.AddAnnotation("Relational:ViewName", null);
runtimeEntityType.AddAnnotation("Relational:ViewSchema", null);

Customize(runtimeEntityType);
}

static partial void Customize(RuntimeEntityType runtimeEntityType);
}
}
Loading