/// <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;
 }
示例#4
0
        /// <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);
        }
示例#5
0
 /// <summary>
 /// Initializes an instance of <see cref="TransactionConfiguration"/>.
 /// </summary>
 public TransactionConfiguration(EntityFrameworkCoreOptions efCoreOptions) : base(efCoreOptions)
 {
 }
示例#6
0
        /// <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)
 {
 }