StockConfiguration.cs 1.6 KB

1234567891011121314151617181920212223242526272829
  1. using Domain.Entities.Stocks;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.EntityFrameworkCore.Metadata.Builders;
  4. namespace Infrastructure.Persistence.Configurations.Stocks;
  5. public sealed class StockConfiguration : IEntityTypeConfiguration<Stock>
  6. {
  7. public void Configure(EntityTypeBuilder<Stock> builder)
  8. {
  9. builder.HasIndex(x => x.Code).IsUnique();
  10. builder.HasIndex(x => x.ISIN).IsUnique().HasFilter("[ISIN] IS NOT NULL");
  11. builder.HasIndex(x => new { x.Market, x.IsActive });
  12. builder.HasIndex(x => x.Name);
  13. builder.HasIndex(x => x.CorpCode);
  14. builder.ToTable(nameof(Stock), t => t.HasComment("종목 마스터 (KRX 상장종목)"));
  15. builder.HasKey(x => x.ID);
  16. builder.Property(x => x.Code).HasMaxLength(6).IsFixedLength().IsRequired().HasComment("단축코드");
  17. builder.Property(x => x.ISIN).HasMaxLength(12).IsFixedLength().HasComment("표준코드");
  18. builder.Property(x => x.Name).HasMaxLength(100).IsRequired();
  19. builder.Property(x => x.EnglishName).HasMaxLength(200);
  20. builder.Property(x => x.Market).HasConversion<byte>().IsRequired().HasComment("시장 구분 (1=KOSPI, 2=KOSDAQ, 3=KONEX)");
  21. builder.Property(x => x.TradingStatus).HasConversion<byte>().IsRequired().HasComment("거래 상태 (0=정상, 1=거래정지, 2=관리종목)");
  22. builder.Property(x => x.CorpCode).HasMaxLength(8).IsFixedLength().HasComment("DART 고유번호");
  23. builder.Property(x => x.SectorName).HasMaxLength(100);
  24. builder.Property(x => x.LastChangeRate).HasPrecision(7, 2);
  25. }
  26. }