我们基于官方教程并结合下列教程,开始创建Book之旅。
在Acme.BookStore.Domain.Shared中添加BookType.cs
namespace Acme.BookStore.Domain.Shared.Enums
{
public enum BookType
{
Undefined,
Adventure,
Biography,
Dystopia,
Fantastic,
Horror,
Science,
ScienceFiction,
Poetry
}
}
在Acme.BookStore.Domain中添加Book.cs
namespace Acme.BookStore.Domain.Entities
{
public class Book : AuditedAggregateRoot<Guid>
{
public string Name { get; set; }
public BookType Type { get; set; }
public DateTime PublishDate { get; set; }
public float Price { get; set; }
}
}
在Acme.BookStore.EntityFrameworkCore中添加BookStoreDbContext.cs
namespace Acme.BookStore.EntityFrameworkCore
{
[ConnectionStringName("Default")]
public class BookStoreDbContext : AbpDbContext<BookStoreDbContext>
{
public DbSet<Book> Books { get; set; }
public BookStoreDbContext(DbContextOptions<BookStoreDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//自动加载数据库映射配置
modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
}
}
}
这个写法与官方教程不同,官方是
BookStoreDbContextModelCreatingExtensions进行数据库映射配置
在Acme.BookStore.EntityFrameworkCore中添加BookMap.cs
namespace Acme.BookStore.EntityFrameworkCore.Mappings
{
public class BookMap : IEntityTypeConfiguration<Book>
{
public void Configure(EntityTypeBuilder<Book> builder)
{
builder.ToTable(nameof(Book));
builder.ConfigureByConvention();
builder.Property(x => x.Name).IsRequired().HasMaxLength(128);
}
}
}
在Acme.BookStore.EntityFrameworkCore.DbMigrations中添加BookStoreMigrationsDbContextFactory.cs
namespace Acme.BookStore.EntityFrameworkCore.DbMigrations
{
public class BookStoreMigrationsDbContextFactory : IDesignTimeDbContextFactory<BookStoreDbContext>
{
public BookStoreDbContext CreateDbContext(string[] args)
{
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<BookStoreDbContext>()
.UseSqlServer(
configuration.GetConnectionString("Default"),
optionsBuilder => optionsBuilder.MigrationsAssembly(Assembly.GetExecutingAssembly().FullName));
return new BookStoreDbContext(builder.Options);
}
private static IConfigurationRoot BuildConfiguration()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false);
return builder.Build();
}
}
}
在Acme.BookStore.EntityFrameworkCore.DbMigrations中添加appsettings.json
{
"ConnectionStrings": {
"Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=Acme.BookStore;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
这个写法与官方教程不同,官方是以
.DbMigrator或.Host项目为启动项目,并且使用项目中的中appsettings.json文件进行迁移操作。
我们这是直接以Acme.BookStore.EntityFrameworkCore.DbMigrations为启动项目,进行迁移操作。
Acme.BookStore.EntityFrameworkCore.DbMigrations设为启动项目。Acme.BookStore.EntityFrameworkCore.DbMigrations 做为默认项目然后执行以下命令:Add-Migration "Created_Book_Entity"
Update-Database
精简版Abp开发教程 - 第二章: 创建Book实体及数据迁移
原文:https://www.cnblogs.com/HUGO_CM/p/13794883.html