diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj b/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj
index 41f8686caf..69e9c3802f 100644
--- a/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj
@@ -5,9 +5,13 @@
-
-
-
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs
index 9c3de2cecf..a1accb54d9 100644
--- a/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs
@@ -1,8 +1,11 @@
-using Microsoft.AspNetCore.Builder;
+using AbpPerfTest.WithAbp.EntityFramework;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Autofac;
+using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.SqlServer;
using Volo.Abp.Modularity;
@@ -15,6 +18,19 @@ namespace AbpPerfTest.WithAbp
)]
public class AppModule : AbpModule
{
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddAbpDbContext(options =>
+ {
+ options.AddDefaultRepositories();
+ });
+
+ Configure(options =>
+ {
+ options.UseSqlServer();
+ });
+ }
+
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs
new file mode 100644
index 0000000000..ed7bdb6a4d
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs
@@ -0,0 +1,86 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using AbpPerfTest.WithAbp.Dtos;
+using AbpPerfTest.WithAbp.Entities;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp.Domain.Repositories;
+
+namespace AbpPerfTest.WithAbp.Controllers
+{
+ [Route("api/books")]
+ public class BookController : Controller
+ {
+ private readonly IRepository _bookRepository;
+
+ public BookController(IRepository bookRepository)
+ {
+ _bookRepository = bookRepository;
+ }
+
+ [HttpGet]
+ public async Task> GetListAsync()
+ {
+ var books = await _bookRepository.GetListAsync();
+
+ return books
+ .Select(b => new BookDto
+ {
+ Id = b.Id,
+ Name = b.Name,
+ Price = b.Price,
+ IsAvailable = b.IsAvailable
+ })
+ .ToList();
+ }
+
+ [HttpGet]
+ [Route("{id}")]
+ public async Task GetAsync(Guid id)
+ {
+ var book = await _bookRepository.GetAsync(id);
+
+ return new BookDto
+ {
+ Id = book.Id,
+ Name = book.Name,
+ Price = book.Price,
+ IsAvailable = book.IsAvailable
+ };
+ }
+
+ [HttpPost]
+ public async Task CreateAsync(CreateUpdateBookDto input)
+ {
+ var book = new Book
+ {
+ Name = input.Name,
+ Price = input.Price,
+ IsAvailable = input.IsAvailable
+ };
+
+ await _bookRepository.InsertAsync(book);
+
+ return book.Id;
+ }
+
+ [HttpPut]
+ [Route("{id}")]
+ public async Task UpdateAsync(Guid id, CreateUpdateBookDto input)
+ {
+ var book = await _bookRepository.GetAsync(id);
+
+ book.Name = input.Name;
+ book.Price = input.Price;
+ book.IsAvailable = input.IsAvailable;
+ }
+
+ [HttpDelete]
+ [Route("{id}")]
+ public async Task DeleteAsync(Guid id)
+ {
+ await _bookRepository.DeleteAsync(id);
+ }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Dtos/BookDto.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Dtos/BookDto.cs
new file mode 100644
index 0000000000..158fc86b52
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Dtos/BookDto.cs
@@ -0,0 +1,15 @@
+using System;
+
+namespace AbpPerfTest.WithAbp.Dtos
+{
+ public class BookDto
+ {
+ public Guid Id { get; set; }
+
+ public string Name { get; set; }
+
+ public float Price { get; set; }
+
+ public bool IsAvailable { get; set; }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Dtos/CreateUpdateBookDto.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Dtos/CreateUpdateBookDto.cs
new file mode 100644
index 0000000000..fa3aa996f6
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Dtos/CreateUpdateBookDto.cs
@@ -0,0 +1,11 @@
+namespace AbpPerfTest.WithAbp.Dtos
+{
+ public class CreateUpdateBookDto
+ {
+ public string Name { get; set; }
+
+ public float Price { get; set; }
+
+ public bool IsAvailable { get; set; }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Entities/Book.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Entities/Book.cs
new file mode 100644
index 0000000000..75a94d7271
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Entities/Book.cs
@@ -0,0 +1,19 @@
+using System;
+using Volo.Abp.Domain.Entities;
+
+namespace AbpPerfTest.WithAbp.Entities
+{
+ public class Book : BasicAggregateRoot
+ {
+ public string Name { get; set; }
+
+ public float Price { get; set; }
+
+ public bool IsAvailable { get; set; }
+
+ public Book()
+ {
+ Id = Guid.NewGuid();
+ }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/EntityFramework/BookDbContext.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/EntityFramework/BookDbContext.cs
new file mode 100644
index 0000000000..02e5f788cf
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/EntityFramework/BookDbContext.cs
@@ -0,0 +1,28 @@
+using AbpPerfTest.WithAbp.Entities;
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+
+namespace AbpPerfTest.WithAbp.EntityFramework
+{
+ public class BookDbContext : AbpDbContext
+ {
+ public DbSet Books { get; set; }
+
+ public BookDbContext(DbContextOptions builderOptions)
+ : base(builderOptions)
+ {
+
+ }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ base.OnModelCreating(modelBuilder);
+
+ modelBuilder.Entity(b =>
+ {
+ b.ToTable("Books");
+ b.Property(x => x.Name).HasMaxLength(128);
+ });
+ }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/EntityFramework/BookDbContextFactory.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/EntityFramework/BookDbContextFactory.cs
new file mode 100644
index 0000000000..b50975b8c2
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/EntityFramework/BookDbContextFactory.cs
@@ -0,0 +1,29 @@
+using System.IO;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Design;
+using Microsoft.Extensions.Configuration;
+
+namespace AbpPerfTest.WithAbp.EntityFramework
+{
+ public class BookDbContextFactory : IDesignTimeDbContextFactory
+ {
+ public BookDbContext CreateDbContext(string[] args)
+ {
+ var configuration = BuildConfiguration();
+
+ var builder = new DbContextOptionsBuilder()
+ .UseSqlServer(configuration.GetConnectionString("Default"));
+
+ return new BookDbContext(builder.Options);
+ }
+
+ private static IConfigurationRoot BuildConfiguration()
+ {
+ var builder = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: false);
+
+ return builder.Build();
+ }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/20201222135738_Added_Books.Designer.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/20201222135738_Added_Books.Designer.cs
new file mode 100644
index 0000000000..f8b3db4d21
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/20201222135738_Added_Books.Designer.cs
@@ -0,0 +1,48 @@
+//
+using System;
+using AbpPerfTest.WithAbp.EntityFramework;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+
+namespace AbpPerfTest.WithAbp.Migrations
+{
+ [DbContext(typeof(BookDbContext))]
+ [Migration("20201222135738_Added_Books")]
+ partial class Added_Books
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .UseIdentityColumns()
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("ProductVersion", "5.0.1");
+
+ modelBuilder.Entity("AbpPerfTest.WithAbp.Entities.Book", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsAvailable")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Price")
+ .HasColumnType("real");
+
+ b.HasKey("Id");
+
+ b.ToTable("Books");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/20201222135738_Added_Books.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/20201222135738_Added_Books.cs
new file mode 100644
index 0000000000..f61374b9dc
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/20201222135738_Added_Books.cs
@@ -0,0 +1,31 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace AbpPerfTest.WithAbp.Migrations
+{
+ public partial class Added_Books : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Books",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true),
+ Price = table.Column(type: "real", nullable: false),
+ IsAvailable = table.Column(type: "bit", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Books", x => x.Id);
+ });
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Books");
+ }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/BookDbContextModelSnapshot.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/BookDbContextModelSnapshot.cs
new file mode 100644
index 0000000000..8987a178df
--- /dev/null
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Migrations/BookDbContextModelSnapshot.cs
@@ -0,0 +1,46 @@
+//
+using System;
+using AbpPerfTest.WithAbp.EntityFramework;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+
+namespace AbpPerfTest.WithAbp.Migrations
+{
+ [DbContext(typeof(BookDbContext))]
+ partial class BookDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .UseIdentityColumns()
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("ProductVersion", "5.0.1");
+
+ modelBuilder.Entity("AbpPerfTest.WithAbp.Entities.Book", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsAvailable")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)");
+
+ b.Property("Price")
+ .HasColumnType("real");
+
+ b.HasKey("Id");
+
+ b.ToTable("Books");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json b/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json
index d9d9a9bff6..9cd22c72c3 100644
--- a/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json
+++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json
@@ -6,5 +6,8 @@
"Microsoft.Hosting.Lifetime": "Information"
}
},
- "AllowedHosts": "*"
+ "AllowedHosts": "*",
+ "ConnectionStrings": {
+ "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=AbpPerfTest_WithAbp;Trusted_Connection=True;MultipleActiveResultSets=true"
+ }
}
diff --git a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/AbpPerfTest.WithoutAbp.csproj b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/AbpPerfTest.WithoutAbp.csproj
index edf2ed6d58..fd061fe040 100644
--- a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/AbpPerfTest.WithoutAbp.csproj
+++ b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/AbpPerfTest.WithoutAbp.csproj
@@ -5,11 +5,11 @@
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
diff --git a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Controllers/BookController.cs b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Controllers/BookController.cs
index 96cb30eedd..c7b5746bc7 100644
--- a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Controllers/BookController.cs
+++ b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Controllers/BookController.cs
@@ -56,7 +56,6 @@ namespace AbpPerfTest.WithoutAbp.Controllers
{
var book = new Book
{
- Id = Guid.NewGuid(),
Name = input.Name,
Price = input.Price,
IsAvailable = input.IsAvailable
diff --git a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Entities/Book.cs b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Entities/Book.cs
index 7a52830cf3..d33b5c309c 100644
--- a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Entities/Book.cs
+++ b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Entities/Book.cs
@@ -11,5 +11,10 @@ namespace AbpPerfTest.WithoutAbp.Entities
public float Price { get; set; }
public bool IsAvailable { get; set; }
+
+ public Book()
+ {
+ Id = Guid.NewGuid();
+ }
}
}