mirror of https://github.com/abpframework/abp
				
				
				
			
						commit
						0343ed5a23
					
				| @ -1,3 +1,96 @@ | ||||
| # BLOB Storing Database Provider | ||||
| 
 | ||||
| TODO | ||||
| BLOB Storing Database Storage Provider can store BLOBs in a relational or non-relational database. | ||||
| 
 | ||||
| There are two database providers implemented; | ||||
| 
 | ||||
| * [Volo.Abp.BlobStoring.Database.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Database.EntityFrameworkCore) package implements for [EF Core](Entity-Framework-Core.md), so it can store BLOBs in [any DBMS supported](https://docs.microsoft.com/en-us/ef/core/providers/) by the EF Core. | ||||
| * [Volo.Abp.BlobStoring.Database.MongoDB](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Database.MongoDB) package implements for [MongoDB](MongoDB.md). | ||||
| 
 | ||||
| > Read the [BLOB Storing document](Blob-Storing.md) to understand how to use the BLOB storing system. This document only covers how to configure containers to use a database as the storage provider. | ||||
| 
 | ||||
| ## Installation | ||||
| 
 | ||||
| ### Automatic Installation | ||||
| 
 | ||||
| If you've created your solution based on the [application startup template](Startup-Templates/Application.md), you can use the `abp add-module` [CLI](CLI.md) command to automatically add related packages to your solution. | ||||
| 
 | ||||
| Open a command prompt (terminal) in the folder containing your solution (`.sln`) file and run the following command: | ||||
| 
 | ||||
| ````bash | ||||
| abp add-module Volo.Abp.BlobStoring.Database | ||||
| ```` | ||||
| 
 | ||||
| This command adds all the NuGet packages to corresponding layers of your solution. If you are using EF Core, it adds necessary configuration, adds a new database migration and updates the database. | ||||
| 
 | ||||
| ### Manual Installation | ||||
| 
 | ||||
| Here, all the NuGet packages defined by this provider; | ||||
| 
 | ||||
| * [Volo.Abp.BlobStoring.Database.Domain.Shared](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Domain.Shared) | ||||
| * [Volo.Abp.BlobStoring.Database.Domain](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Database.Domain) | ||||
| * [Volo.Abp.BlobStoring.Database.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Database.EntityFrameworkCore) | ||||
| * [Volo.Abp.BlobStoring.Database.MongoDB](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Database.MongoDB) | ||||
| 
 | ||||
| You can only install Volo.Abp.BlobStoring.Database.EntityFrameworkCore or Volo.Abp.BlobStoring.Database.MongoDB (based on your preference) since they depends on the other packages. | ||||
| 
 | ||||
| After installation, add `DepenedsOn` attribute to your related [module](Module-Development-Basics.md). Here, the list of module classes defined by the related NuGet packages listed above: | ||||
| 
 | ||||
| * `BlobStoringDatabaseDomainModule` | ||||
| * `BlobStoringDatabaseDomainSharedModule` | ||||
| * `BlobStoringDatabaseEntityFrameworkCoreModule` | ||||
| * `BlobStoringDatabaseMongoDbModule` | ||||
| 
 | ||||
| Whenever you add a NuGet package to a project, also add the module class dependency. | ||||
| 
 | ||||
| If you are using EF Core, you also need to configure your **Migration DbContext** to add BLOB storage tables to your database schema. Call `builder.ConfigureBlobStoring()` extension method inside the `OnModelCreating` method to include mappings to your DbContext. Then you can use the standard `Add-Migration` and `Update-Database` [commands](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/) to create necessary tables in your database. | ||||
| 
 | ||||
| ## Configuration | ||||
| 
 | ||||
| ### Connection String | ||||
| 
 | ||||
| If you will use your `Default` connection string, you don't need to any additional configuration. | ||||
| 
 | ||||
| If you want to use a separate database for BLOB storage, use the `AbpBlobStoring` as the [connection string](Connection-Strings.md) name in your configuration file (`appsettings.json`). In this case, also read the [EF Core Migrations](Entity-Framework-Core-Migrations.md) document to learn how to create and use a different database for a desired module. | ||||
| 
 | ||||
| ### Configuring the Containers | ||||
| 
 | ||||
| Configuration is done in the `ConfigureServices` method of your [module](Module-Development-Basics.md) class, as explained in the [BLOB Storing document](Blob-Storing.md). | ||||
| 
 | ||||
| **Example: Configure to use the database storage provider by default** | ||||
| 
 | ||||
| ````csharp | ||||
| Configure<AbpBlobStoringOptions>(options => | ||||
| { | ||||
|     options.Containers.ConfigureDefault(container => | ||||
|     { | ||||
|         container.UseDatabase(); | ||||
|     }); | ||||
| }); | ||||
| ```` | ||||
| 
 | ||||
| > See the [BLOB Storing document](Blob-Storing.md) to learn how to configure this provider for a specific container. | ||||
| 
 | ||||
| ## Additional Information | ||||
| 
 | ||||
| It is expected to use the [BLOB Storing services](Blob-Storing.md) to use the BLOB storing system. However, if you want to work on the database tables/entities, you can use the following information. | ||||
| 
 | ||||
| ### Entities | ||||
| 
 | ||||
| Entities defined for this module: | ||||
| 
 | ||||
| * `DatabaseBlobContainer` (aggregate root) represents a container stored in the database. | ||||
| * `DatabaseBlob` (aggregate root) represents a BLOB in the database. | ||||
| 
 | ||||
| See the [entities document](Entities.md) to learn what is an entity and aggregate root. | ||||
| 
 | ||||
| ### Repositories | ||||
| 
 | ||||
| * `IDatabaseBlobContainerRepository` | ||||
| * `IDatabaseBlobRepository` | ||||
| 
 | ||||
| You can also use `IRepository<DatabaseBlobContainer, Guid>` and `IRepository<DatabaseBlob, Guid>` to take the power of IQueryable. See the [repository document](Repositories.md) for more. | ||||
| 
 | ||||
| ### Other Services | ||||
| 
 | ||||
| * `DatabaseBlobProvider` is the main service that implements the database BLOB storage provider, if you want to override/replace it via [dependency injection](Dependency-Injection.md) (don't replace `IBlobProvider` interface, but replace `DatabaseBlobProvider` class). | ||||
					Loading…
					
					
				
		Reference in new issue
	
	 Halil İbrahim Kalkan
						Halil İbrahim Kalkan