/// <summary> /// Uses the EntityFramework Core as a storage for saving and loading data. /// <para> /// Note: It means Parbad can save and load the data in different database providers /// such as SQL Server, MySql, Sqlite, PostgreSQL, Oracle, InMemory, etc. /// For more information see: https://docs.microsoft.com/en-us/ef/core/providers/. /// </para> /// <para>Note: This database is only for internal usages such as saving and loading payment information. /// You don't need to think about merging and using this database with your own database. /// The important payment information such as Tracking Number, Transaction Code, etc. will you get from the result of /// all payment requests.</para> /// </summary> /// <param name="builder"></param> /// <param name="configureEfCoreOptions">Configures the EntityFrameworkCore options for Parbad.</param> public static IStorageBuilder UseEfCore(this IStorageBuilder builder, Action <EntityFrameworkCoreOptions> configureEfCoreOptions) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (configureEfCoreOptions == null) { throw new ArgumentNullException(nameof(configureEfCoreOptions)); } var options = new EntityFrameworkCoreOptions(); configureEfCoreOptions(options); builder.Services.Configure(configureEfCoreOptions); builder.Services.AddDbContext <ParbadDataContext>(dbBuilder => { options.ConfigureDbContext?.Invoke(dbBuilder); }); builder.AddStorage <EntityFrameworkCoreStorage>(ServiceLifetime.Transient); builder.AddStorageManager <EntityFrameworkCoreStorageManager>(ServiceLifetime.Transient); return(builder); }
/// <summary> /// Configures the entity. /// </summary> public abstract void Configure(EntityTypeBuilder <TEntity> builder, EntityFrameworkCoreOptions tableOptions);
/// <summary> /// Initializes an instance of <see cref="EntityTypeConfiguration{TEntity}"/>. /// </summary> protected EntityTypeConfiguration(EntityFrameworkCoreOptions efCoreOptions) { EntityFrameworkCoreOptions = efCoreOptions; }
/// <inheritdoc /> public override void Configure(EntityTypeBuilder <TransactionEntity> builder, EntityFrameworkCoreOptions efCoreOptions) { builder.ToTable(efCoreOptions.TransactionTableOptions, efCoreOptions.DefaultSchema); builder .HasKey(entity => entity.Id) .HasName("transaction_id"); builder.Property(entity => entity.Id) .HasColumnName("transaction_id") .ValueGeneratedOnAdd(); builder.Property(entity => entity.Amount) .HasColumnName("amount") .HasColumnType("decimal(18,2)") .IsRequired(required: true); builder.Property(entity => entity.Type) .HasColumnName("type") .IsRequired(required: true); builder.Property(entity => entity.TypeCode) .HasColumnName("type_code") .HasColumnType("varchar(30)") .IsRequired(required: true); builder.Property(entity => entity.TypeTitle) .HasColumnName("type_title") .HasColumnType("nvarchar(30)") .IsRequired(required: true); builder.Property(entity => entity.IsSucceed) .HasColumnName("is_succeed") .IsRequired(required: true); builder.Property(entity => entity.Message) .HasColumnName("message") .IsRequired(required: false); builder.Property(entity => entity.AdditionalData) .HasColumnName("additional_data") .IsRequired(required: false); builder.Property(entity => entity.CreatedOn) .HasColumnName("created_on") .IsRequired(required: true); builder .Property <long>("PaymentId") .HasColumnName("payment_id"); builder.Property(entity => entity.UpdatedOn) .HasColumnName("updated_on") .IsRequired(required: false); }
/// <summary> /// Initializes an instance of <see cref="TransactionConfiguration"/>. /// </summary> public TransactionConfiguration(EntityFrameworkCoreOptions efCoreOptions) : base(efCoreOptions) { }
/// <inheritdoc /> public override void Configure(EntityTypeBuilder <TransactionEntity> builder, EntityFrameworkCoreOptions efCoreOptions) { builder.ToTable(efCoreOptions.TransactionTableOptions, efCoreOptions.DefaultSchema); builder .HasKey(entity => entity.Id) .HasName("transaction_id"); builder.Property(entity => entity.Id) .HasColumnName("transaction_id") .ValueGeneratedOnAdd(); builder.Property(entity => entity.Amount) .HasColumnName(nameof(TransactionEntity.Amount).ToLower()) .HasColumnType("decimal(18,2)") .IsRequired(required: true); builder.Property(entity => entity.Type) .HasColumnName(nameof(TransactionEntity.Type).ToLower()) .IsRequired(required: true); builder.Property(entity => entity.IsSucceed) .HasColumnName("is_succeed") .IsRequired(required: true); builder.Property(entity => entity.Message) .HasColumnName(nameof(TransactionEntity.Message).ToLower()) .IsRequired(required: false); builder.Property(entity => entity.AdditionalData) .HasColumnName("additional_data") .IsRequired(required: false); builder.Property(entity => entity.CreatedOn) .HasColumnName("created_on") .IsRequired(required: true); builder.Property(entity => entity.UpdatedOn) .HasColumnName("updated_on") .IsRequired(required: false); }
/// <inheritdoc /> public override void Configure(EntityTypeBuilder <PaymentEntity> builder, EntityFrameworkCoreOptions efCoreOptions) { builder.ToTable(efCoreOptions.PaymentTableOptions, efCoreOptions.DefaultSchema); builder .HasKey(entity => entity.Id) .HasName("payment_id"); builder.Property(entity => entity.Id) .HasColumnName("payment_id") .ValueGeneratedOnAdd(); builder.Property(entity => entity.TrackingNumber) .HasColumnName("tracking_number") .IsRequired(required: true); builder.HasIndex(entity => entity.TrackingNumber).IsUnique(unique: true); builder.Property(entity => entity.Token) .HasColumnName(nameof(PaymentEntity.Token).ToLower()) .IsRequired(required: true); builder.HasIndex(entity => entity.Token).IsUnique(unique: true); builder.Property(entity => entity.Amount) .HasColumnName(nameof(PaymentEntity.Amount).ToLower()) .HasColumnType("decimal(18,2)") .IsRequired(required: true); builder.Property(entity => entity.TransactionCode) .HasColumnName("transaction_code") .IsRequired(required: false); builder.Property(entity => entity.GatewayName) .HasColumnName("gateway_name") .HasMaxLength(20) .IsRequired(required: true); builder.Property(entity => entity.IsCompleted) .HasColumnName("is_completed") .IsRequired(required: true); builder.Property(entity => entity.IsPaid) .HasColumnName("is_paid") .IsRequired(required: true); builder.Property(entity => entity.GatewayAccountName) .HasColumnName("gateway_account_name") .IsRequired(required: false); builder.Property(entity => entity.CreatedOn) .HasColumnName("created_on") .IsRequired(required: true); builder.Property(entity => entity.UpdatedOn) .HasColumnName("updated_on") .IsRequired(required: false); builder .HasMany(entity => entity.Transactions) .WithOne(entity => entity.Payment) .HasForeignKey(entity => entity.PaymentId) .OnDelete(DeleteBehavior.Cascade); }
/// <summary> /// Initializes an instance of <see cref="PaymentConfiguration"/>. /// </summary> public PaymentConfiguration(EntityFrameworkCoreOptions efCoreOptions) : base(efCoreOptions) { }