From 991b6d423107372de5cf25f50ec84b96702ce370 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Thu, 28 Jun 2018 22:50:28 +0300 Subject: [PATCH] #313: Create the Book entity. --- docs/Application-Services.md | 3 + docs/Tutorials/AspNetCore-Mvc/Part-I.md | 103 ++++- docs/images/bookstore-books-table.png | Bin 0 -> 10424 bytes .../bookstore-pmc-add-book-migration.png | Bin 0 -> 8135 bytes .../src/Acme.BookStore.Domain/Book.cs | 21 ++ .../Acme.BookStore.Domain/BookStoreConsts.cs | 8 - .../src/Acme.BookStore.Domain/BookType.cs | 14 + .../Acme.BookStore.EntityFrameworkCore.csproj | 4 + .../EntityFrameworkCore/BookStoreDbContext.cs | 9 +- ...0628193337_Created_Book_Entity.Designer.cs | 356 ++++++++++++++++++ .../20180628193337_Created_Book_Entity.cs | 32 ++ .../BookStoreDbContextModelSnapshot.cs | 28 +- 12 files changed, 557 insertions(+), 21 deletions(-) create mode 100644 docs/Application-Services.md create mode 100644 docs/images/bookstore-books-table.png create mode 100644 docs/images/bookstore-pmc-add-book-migration.png create mode 100644 samples/BookStore/src/Acme.BookStore.Domain/Book.cs delete mode 100644 samples/BookStore/src/Acme.BookStore.Domain/BookStoreConsts.cs create mode 100644 samples/BookStore/src/Acme.BookStore.Domain/BookType.cs create mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/20180628193337_Created_Book_Entity.Designer.cs create mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/20180628193337_Created_Book_Entity.cs diff --git a/docs/Application-Services.md b/docs/Application-Services.md new file mode 100644 index 0000000000..3dc24c9d9a --- /dev/null +++ b/docs/Application-Services.md @@ -0,0 +1,3 @@ +## Application Services + +TODO \ No newline at end of file diff --git a/docs/Tutorials/AspNetCore-Mvc/Part-I.md b/docs/Tutorials/AspNetCore-Mvc/Part-I.md index 9b3c968692..4d68689626 100644 --- a/docs/Tutorials/AspNetCore-Mvc/Part-I.md +++ b/docs/Tutorials/AspNetCore-Mvc/Part-I.md @@ -1,3 +1,104 @@ ## ASP.NET Core MVC Tutorial - Part I -TODO \ No newline at end of file +> This tutorial assumes that you have created a new project, named `Acme.BookStore` from [the startup templates](https://abp.io/Templates). + +### About the Tutorial + +In this tutorial series, you will build an application that is used to manage a list of books & their authors. **Entity Framework Core** (EF Core) will be used as the ORM provider (as it comes pre-configured with the startup template). + +### Solution Structure + +This is the layered solution structure created from the startup template: + +![bookstore-visual-studio-solution](../../images/bookstore-visual-studio-solution.png) + +### Create the Book Entity + +Define [entities](../../Entities.md) in the **domain layer** (`Acme.BookStore.Domain` project) of the solution. The main entity of the application is the `Book`: + +````C# +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Volo.Abp.Domain.Entities; + +namespace Acme.BookStore +{ + [Table("Books")] + public class Book : AggregateRoot + { + [Required] + [StringLength(128)] + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } + } +} +```` + +* ABP has two fundamental base classes for entities: `AggregateRoot` and `Entity`. **Aggregate Roots** are one of the concepts of the **Domain Driven Design (DDD)**. See [entity document](../../Entities.md) for details and best practices. +* Used **data annotation attributes** in this code. You could use EF Core's [fluent mapping API](https://docs.microsoft.com/en-us/ef/core/modeling) instead. + +#### BookType Enum + +The `BookType` enum used above is defined as below: + +````C# +namespace Acme.BookStore +{ + public enum BookType : byte + { + Undefined, + Advanture, + Biography, + Dystopia, + Fantastic, + Horror, + Science, + ScienceFiction, + Poetry + } +} +```` + +#### Add Book Entity to Your DbContext + +EF Core requires to relate entities with your DbContext. The easiest way is to add a `DbSet` property to the `BookStoreDbContext` as shown below: + +````C# +public class BookStoreDbContext : AbpDbContext +{ + public DbSet Book { get; set; } + ... +} +```` + +* `BookStoreDbContext` is located in the `Acme.BookStore.EntityFrameworkCore` project. + +#### Add new Migration & Update the Database + +Startup template uses [EF Core Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/) to create and maintain the database schema. Open the **Package Manager Console (PMC)**, select the `Acme.BookStore.EntityFrameworkCore` as the **default project** and execute the following command: + +![bookstore-pmc-add-book-migration](../../images\bookstore-pmc-add-book-migration.png) + +This will create a new migration class inside the `Migrations` folder. Then execute the `Update-Database` command to update the database schema: + +```` +PM> Update-Database +```` + +#### Add Sample Data + +`Update-Database` command created the `Books` table in the database. Enter a few sample rows, so you can show them on the page: + +![bookstore-books-table](../../images\bookstore-books-table.png) + +### Create the Application Service + +The next step is to create an [application service](../../Application-Services.md) to manage (create, list, update, delete...) books. + +TODO... \ No newline at end of file diff --git a/docs/images/bookstore-books-table.png b/docs/images/bookstore-books-table.png new file mode 100644 index 0000000000000000000000000000000000000000..0493791918c1ca538e0e93cc9a96732da7fe9ed2 GIT binary patch literal 10424 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

JGQ;pO14=Rrf@NsezRU%=s#n z%pz-L{a3TRhk1==lpWAJj#vDfn+BBzQAmj8L$ks~?L-U`(v?(ca1|x7`kPbxRDs0p zMuV3uhmP+4V=q{!JJ0QX^U!&@)d;dqA#__?mb4@>^H>z?^$B?JNho`|)Dy`Q3AcDj z!l&>0`hv3PW_9OAY;kU>?mgQlMAQOS(W>qFEUU!=-}$B#U1qEHSkX3pvp)vwcd)|c zw<5h&KIR)9d@fya%&yfFWnP@y9U%pLTJ(x~b29`%^*0^lb8tEyUGW{$ zGema<6A-~EIvu3^%KoBqF~JP+18$-}f++-e5La023GGIdm)gSnX4ia{s#ooAhN+Wu z89iI-7$lbY>+JP?7F@H6`y>*7c7^>oU<#h_gs7xBc*bS8;cG zH6#zc5h$ofSnEJd-@Bxw6(Y5awk!^)ZoyuRj_)%tpGe#gj}?_TnM);VlFK00pL)U@1b-qceORRy_#-Yrt-Qt1Y@ z)P~!9TAe2m-62Ow?!lRsWhEu^H|p~UN!XQ7IuCx%d4eU|4?5}*mkHuE(eIqoFSb0m zJclGh(k}lwKwj?qucU09E<>j6n2~oAR(9~2d1y-aD2>S&s_mwYer6h2J^b>~@+)r; zWt?7oUY``!Mail`L&Dpapnnfl&08K?q?c#PN+k$i~O4kOu^)JAFg zLR8bZud>)=#sQ=+eGam6A-?IQ3>#0aVg>&pL#p}*K=8r$h3W_IpE=sNLS|4e;MaA+1z?K;x5(})*_Soj;0 z`fl?#0~mLq=-|4w)y1Li=-0soY>I4i6MN%lpO1-z0uRdO*y}DG?1o$NQKMyX0)(AO z`IS;01_g#v{x=E8W}i8HK&EHzl{PD8*V7t{-VtFQtv!XuC0@{qT0LtBLyH?~Yj`P9 zy^87LF`ru~(=v?V191UVbd_nZDKsRbAyS&@Lcnc10NNDw>IeC+@Z^ybPe+lfBuS0FgvOM$`qC?A zOV{&$VJ5o{dX>|a^G6&LDiP}OCk(z_C~G^5`>BJ7^5-Lxo=Y#Z>lgL8&s*bdw_Er1 zm1tG5Hg&?lvmi2yC6KzDOYpDRSWnI89&+$Iw;33}8t;g&P}mRxJ*~n3q4~W+BEYM& zkcqrnSD%}pJD(Jtgdqgfzg2}|`U>!|R$;$FnIXA7zt#83zS{BUWWeP?a_R49C&tn( zDQ7=}6D&dPF0wbru)i6|6dky2FL{4Ix`cQzi5#zsYSfSW`Q*}grfJ9qE7=s|b-l;( z9o#y0X|`&P45J6u^?O@bO;JHD8$rLGhlc|byWzEUQ3Yksxoy=r>zvY^DcVL;qhQl_ z|E>iPF}FpC)IK)Z5y>O(bSNE)o*pojD7ZcR4J&*r96u7HmuflbG@szz%&**48v1yT z-@Si^Z8CSRmc5dg3d~@W*s&_h*6eBsFBOFp?FYElaKSJ>^SRt%6X!09<%sdz5Rc6U z^UbIE&aky76W@co=BBTcv)7SFtcNh-45!`udOZX&U>PC_lKeZ0PutL z9R||NHk*b6q-#OskiIOJUx&XvYM;TphKa#6WDmoOhDM12aE0f)6azUZZ=#culG2+Z zy(EU#p94;30xy9N{jAqovNznHs^OD5kM9ZOQJ7KU0dSwphJ({LH`82Uq1b5Aq1|=G zZ{?H{7GVv!pa23y>&J03)o=j2q*b_so>#AM!|%6;7-ba#rttrc156OFqHZg+_-_ob zk#!_}@zqGV-_i~TfbkO}HWD8#(W8xi0D%7AaxD&mr+vQC;g%lve+26PF36r)A2MA- vh_JPd;hnkiW`!4X7w1HBUKYDM}VTN8mLUh + { + [Required] + [StringLength(128)] + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } + } +} diff --git a/samples/BookStore/src/Acme.BookStore.Domain/BookStoreConsts.cs b/samples/BookStore/src/Acme.BookStore.Domain/BookStoreConsts.cs deleted file mode 100644 index e9d4c14540..0000000000 --- a/samples/BookStore/src/Acme.BookStore.Domain/BookStoreConsts.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Acme.BookStore -{ - public static class BookStoreConsts - { - public const string DbTablePrefix = "App"; - public const string DbSchema = null; - } -} diff --git a/samples/BookStore/src/Acme.BookStore.Domain/BookType.cs b/samples/BookStore/src/Acme.BookStore.Domain/BookType.cs new file mode 100644 index 0000000000..e5bf7e027c --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Domain/BookType.cs @@ -0,0 +1,14 @@ +namespace Acme.BookStore +{ + public enum BookType : byte + { + Undefined, + Advanture, + Biography, + Fantastic, + Horror, + Science, + ScienceFiction, + Poetry + } +} \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj index f5521eed84..66b8fc5e35 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Acme.BookStore.EntityFrameworkCore.csproj @@ -5,6 +5,10 @@ Acme.BookStore + + + + diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs index b99cb5bed1..86d276a6f7 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs @@ -8,6 +8,8 @@ namespace Acme.BookStore.EntityFrameworkCore { public class BookStoreDbContext : AbpDbContext { + public DbSet Book { get; set; } + public BookStoreDbContext(DbContextOptions options) : base(options) { @@ -21,13 +23,6 @@ namespace Acme.BookStore.EntityFrameworkCore modelBuilder.ConfigureIdentity(); modelBuilder.ConfigurePermissionManagement(); modelBuilder.ConfigureSettingManagement(); - - //builder.Entity(b => - //{ - // b.ToTable(BookStoreConsts.DbTablePrefix + "PermissionGrants", BookStoreConsts.DbSchema); - - // ... - //}); } } } diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/20180628193337_Created_Book_Entity.Designer.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/20180628193337_Created_Book_Entity.Designer.cs new file mode 100644 index 0000000000..a06036b726 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/20180628193337_Created_Book_Entity.Designer.cs @@ -0,0 +1,356 @@ +// +using System; +using Acme.BookStore.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace Acme.BookStore.Migrations +{ + [DbContext(typeof(BookStoreDbContext))] + [Migration("20180628193337_Created_Book_Entity")] + partial class Created_Book_Entity + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.1.1-rtm-30846") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Acme.BookStore.Book", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("Price"); + + b.Property("PublishDate"); + + b.Property("Type"); + + b.HasKey("Id"); + + b.ToTable("Books"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ConcurrencyStamp"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasMaxLength(1024); + + b.Property("RoleId"); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsRequired() + .HasColumnName("ConcurrencyStamp") + .HasMaxLength(256); + + b.Property("Email") + .HasColumnName("Email") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasDefaultValue(false); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasColumnName("NormalizedEmail") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasMaxLength(1024); + + b.Property("TenantId"); + + b.Property("UserId"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId"); + + b.Property("LoginProvider") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196); + + b.Property("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.Property("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId"); + + b.Property("LoginProvider") + .HasMaxLength(128); + + b.Property("Name"); + + b.Property("TenantId"); + + b.Property("Value"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64); + + b.Property("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole") + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser") + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser") + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole") + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("Volo.Abp.Identity.IdentityUser") + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser") + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/20180628193337_Created_Book_Entity.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/20180628193337_Created_Book_Entity.cs new file mode 100644 index 0000000000..1e6d5ec0ed --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/20180628193337_Created_Book_Entity.cs @@ -0,0 +1,32 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Acme.BookStore.Migrations +{ + public partial class Created_Book_Entity : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Books", + columns: table => new + { + Id = table.Column(nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + Type = table.Column(nullable: false), + PublishDate = table.Column(nullable: false), + Price = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Books", x => x.Id); + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Books"); + } + } +} diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/BookStoreDbContextModelSnapshot.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/BookStoreDbContextModelSnapshot.cs index 4321228aff..d1693bb99b 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/BookStoreDbContextModelSnapshot.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/Migrations/BookStoreDbContextModelSnapshot.cs @@ -1,13 +1,10 @@ // using System; -using System.Collections.Generic; +using Acme.BookStore.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Metadata.Internal; -using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Acme.BookStore.EntityFrameworkCore; namespace Acme.BookStore.Migrations { @@ -18,9 +15,30 @@ namespace Acme.BookStore.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "2.1.0-preview2-30571") + .HasAnnotation("ProductVersion", "2.1.1-rtm-30846") + .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + modelBuilder.Entity("Acme.BookStore.Book", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("Price"); + + b.Property("PublishDate"); + + b.Property("Type"); + + b.HasKey("Id"); + + b.ToTable("Books"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => { b.Property("Id")