Merge branch 'master' into dev

pull/4178/head^2
Halil İbrahim Kalkan 5 years ago
commit 2a569cb5a3

@ -0,0 +1,3 @@
# Blog Storing
TODO

@ -0,0 +1,273 @@
# ABP Framework v2.9 Has Been Released
The **ABP Framework** & and the **ABP Commercial** version 2.9 have been released, which is the last version before 3.0! This post will cover **what's new** with these this release.
## What's New with the ABP Framework 2.9?
You can see all the changes on the [GitHub release notes](https://github.com/abpframework/abp/releases/tag/2.9.0). This post will only cover the important features/changes.
### Pre-Compiling Razor Pages
Pre-built pages (for [the application modules](https://docs.abp.io/en/abp/latest/Modules/Index)) and view components were compiling on runtime until this version. Now, they are pre-compiled and we've measured that the application startup time (for the MVC UI) has been reduced more than 50%. In other words, it has **two-times faster** than the previous version. Not only for the application startup, the speed change also effects when you visit a page for the first time.
Here, a test result for for the startup project with v2.8 vs v.2.9:
````
### v2.8
2020-06-04 22:59:04.891 +08:00 [INF] Starting web host.
2020-06-04 22:59:07.662 +08:00 [INF] Now listening on: https://localhost:44391
2020-06-04 22:59:17.315 +08:00 [INF] Request finished in 7756.6218ms 200 text/html;
Total: 12.42s
### v2.9
2020-06-04 22:59:13.720 +08:00 [INF] Starting web host.
2020-06-04 22:59:16.639 +08:00 [INF] Now listening on: https://localhost:44369
2020-06-04 22:59:18.957 +08:00 [INF] Request finished in 1780.5461ms 200 text/html;
Total: 5.24s
````
You do nothing to get the benefit of the new system. [Overriding UI pages/components](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Customization-User-Interface) are also just working as before.
We will be working on more performance improvements in the v3.0.
### Organization Unit System
[The Identity Module](https://docs.abp.io/en/abp/latest/Modules/Identity) now has the most requested feature: Organization Units!
Organization unit system is used to create a hierarchical organization tree in your application. You can then use this organization tree to authorize data and functionality in your application.
The documentation will come soon...
### New Blob Storing Package
We've created a new [Blob Storing package](https://www.nuget.org/packages/Volo.Abp.BlobStoring) to store arbitrary binary object. It is generally used to store files in your application. This package provides an abstraction, so any application or [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics) can save and retrieve files independent from the actual storing provider.
There are two storing provider currently implemented:
* [Volo.Abp.BlobStoring.FileSystem](https://www.nuget.org/packages/Volo.Abp.BlobStoring.FileSystem) package stores objects/files in the local file system with a configured folder.
* [Volo.Abp.BlobStoring.Database](https://github.com/abpframework/abp/tree/dev/modules/blob-storing-database) module stores objects/files in a database. It currently supports [Entity Framework Core](https://docs.abp.io/en/abp/latest/Entity-Framework-Core) (so, you can use [any relational DBMS](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-Other-DBMS)) and [MongoDB](https://docs.abp.io/en/abp/latest/MongoDB).
[Azure BLOB provider](https://github.com/abpframework/abp/issues/4098) will be available with v3.0. You can request other cloud providers or contribute yourself on the [GitHub repository](https://github.com/abpframework/abp/issues/new).
One of the benefit of the blob storing system it allows you to create multiple containers (each container is a blob storage) and use different storing providers for each container.
**Example: Use the default container to save and get a byte array**
````csharp
public class MyService : ITransientDependency
{
private readonly IBlobContainer _container;
public MyService(IBlobContainer container)
{
_container = container;
}
public async Task FooAsync()
{
//Save a BLOB
byte[] bytes = GetBytesFromSomeWhere();
await _container.SaveAsync("my-unique-blob-name", bytes);
//Retrieve a BLOB
bytes = await _container.GetAllBytesAsync("my-unique-blob-name");
}
}
````
It can work with `byte[]` and `Stream` objects.
**Example: Use a typed (named) container to save and get a stream**
````csharp
public class MyService : ITransientDependency
{
private readonly IBlobContainer<TestContainer1> _container;
public MyService(IBlobContainer<TestContainer1> container)
{
_container = container;
}
public async Task FooAsync()
{
//Save a BLOB
Stream stream = GetStreamFromSomeWhere();
await _container.SaveAsync("my-unique-blob-name", stream);
//Retrieve a BLOB
stream = await _container.GetAsync("my-unique-blob-name");
}
}
````
`TestContainer1` is an empty class that has no purpose than identifying the container.
A typed (named) container can be configured to use a different storing provider than the default one. It is a good practice to always use a typed container while developing re-usable modules, so the final application can configure provider for this container without effecting the other containers.
**Example: Configure the File System provider for the `TestContainer1`**
````csharp
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.Configure<TestContainer1>(configuration =>
{
configuration.UseFileSystem(fileSystem =>
{
fileSystem.BasePath = "C:\\MyStorageFolder";
});
});
});
````
See the [blob storing documentation](https://docs.abp.io/en/abp/latest/Blob-Storing) for more information.
### Oracle Integration Package for Entity Framework Core
We've create an [integration package for Oracle](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.Oracle.Devart), so you can easily switch to the Oracle for the EF Core. It is tested for the framework and pre-built modules.
[See the documentation](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-Oracle) to start using the Oracle integration package.
### Automatically Determining the Database Provider
When you develop a **reusable application module** with EF Core integration, you want to develop your module **DBMS independent**. However, there are minor (sometimes major) differences between DBMSs. If you perform a custom mapping based on the DBMS, you can now use `ModelBuilder.IsUsingXXX()` extension methods:
````csharp
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Phone>(b =>
{
//...
if (modelBuilder.IsUsingPostgreSql()) //Check if using PostgreSQL!
{
b.Property(x => x.Number).HasMaxLength(20);
}
else
{
b.Property(x => x.Number).HasMaxLength(32);
}
});
}
````
Beside the stupid example above, you can configure your mapping however you need!
### ABP CLI: Translate Command
`abp translate` is a new command that simplifies to translate [localization](https://docs.abp.io/en/abp/latest/Localization) files when you have multiple JSON localization files in a source control repository.
The main purpose of this command is to **translate the ABP Framework** localization files (since the [abp repository](https://github.com/abpframework/abp) has tens of localization files to be translated in different directories).
It is appreciated if you use this command to translate the framework resources **for your mother language**.
See [the documentation](https://docs.abp.io/en/abp/latest/CLI#translate) to learn how to use it.
### The New Virtual File System Explorer Module
Thanks to [@liangshiw](https://github.com/liangshiw) created and contributed a new module to explore files in the [Virtual File System](https://docs.abp.io/en/abp/latest/Virtual-File-System). It works for MVC UI and shows all the virtual files in the application. Example screenshots:
![virtual-file-explorer-1](virtual-file-explorer-1.png)
![virtual-file-explorer-2](virtual-file-explorer-2.png)
### Sample Application: SignalR with Tiered Architecture
Implementing SignalR in a distributed/tiered architecture can be challenging. We've created a sample application that demonstrate how to easily implement it using the [SignalR integration](https://docs.abp.io/en/abp/latest/SignalR-Integration) and the [distributed event bus](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) system.
![signalr-tiered-demo](signalr-tiered-demo.png)
See [the source code](https://github.com/abpframework/abp-samples/tree/master/SignalRTieredDemo) of the sample solution.
**An article is on the road** that will deeply explain the solution. Follow the [@abpframework](https://twitter.com/abpframework) Twitter account.
### About gRPC
Created a sample application to show how to create gRPC endpoints in your ABP based application.
See [the source code](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) on GitHub.
We were planning to create gRPC endpoints for all the pre-built application modules, but see that ASP.NET Core gRPC integration is not mature enough and doesn't support some common deployment scenarios yet. So, deferring this to the next versions ([see this comment](https://github.com/abpframework/abp/issues/2882#issuecomment-633080242) for more). However, it is pretty standard if you want to use gRPC in your applications. ABP Framework has no issue with gRPC. Just check the [sample application](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo).
### Others
* [Time zone system](https://github.com/abpframework/abp/pull/3933) to support different time zones for an application.
* Support for [virtual path deployment](https://github.com/abpframework/abp/issues/4089) on IIS.
* RTL support for the Angular UI.
## What's New with the ABP Commercial 2.9
In addition to all the features coming with the ABP Framework, the ABP Commercial has additional features with this release, as always. This section covers the [ABP Commercial](https://commercial.abp.io/) highlights in the version 2.9.
### Organization Unit Management UI
We've created the UI for manage organization units, their members and roles for the ABP Commercial [Identity Module](https://commercial.abp.io/modules/Volo.Identity.Pro):
![organization-units](organization-units.png)
OU management is available for both of the MVC (Razor Pages) & the Angular user interfaces.
### Chat Module Angular UI
We had introduced a new [chat module](https://commercial.abp.io/modules/Volo.Chat) in the previous version, which was only supporting the ASP.NET Core MVC / Razor Pages UI. Now, it has also an Angular UI option.
![abp-chat-module](abp-chat-module.png)
*A screenshot from the chat module - two users are sending messages to each other*
### Easy CRM Angular UI
Easy CRM is a sample application that is built on the ABP Commercial to provide a relatively complex application to the customers. In the version 2.7, we have lunched it with MVC / Razor Pages UI. With the 2.9 version, we are releasing the AngularUI for the Easy CRM.
![easy-crm](easy-crm.png)
*A screenshot from the "Order Details" page of the Easy CRM application.*
### Module Code Generation for the ABP Suite
[ABP Suite](https://commercial.abp.io/tools/suite) is a tool that's main feature is to [generate code](https://docs.abp.io/en/commercial/latest/abp-suite/generating-crud-page) for complete CRUD functionality for an entity, from database to the UI layer.
![suite](suite.png)
*A screenshot from the ABP Suite: Define the properties of a new entity and let it to create the application code for you!*
It was working only for [the application template](https://docs.abp.io/en/commercial/latest/startup-templates/application/index) until this release. Now, it supports to generate code for the [module projects](https://docs.abp.io/en/commercial/latest/startup-templates/module/index) too. That's a great way to create reusable application modules by taking the power of the code generation.
In addition to this main feature, we added many minor enhancements on the ABP Suite in this release.
> Notice: Generating code for the module template is currently in beta. Please inform us if you find any bug.
### Lepton Theme
[Lepton Theme](https://commercial.abp.io/themes) is the commercial theme we've developed for the ABP Commercial;
* It is 100% bootstrap compatible - so you don't write theme specific HTML!
* It provides different kind of styles - you see the material style in the picture below.
* It provides different kind of layouts (side/top menu, fluid/boxed layout... etc).
* It is lightweight, responsive and modern.
* And... it is upgradeable with no cost! You just update a NuGet/NPM package to get the new features.
We've create its own web site: [http://leptontheme.com/](http://leptontheme.com/)
So, you can view all components together independent from your application:
![lepton-theme](lepton-theme.png)
This web site is currently in a very early stage. We will be documenting and improving this web site to be a reference for your development and explore the features of the theme.
### Coming Soon: The File management Module
Based on the new blob storing system (introduced above), we've started to build a file management module that is used to manage (navigate/upload/download) a hierarchical file system on your application and share the files between your users and with your customers.
We plan to release the initial version with the ABP Commercial v3.0 and continue to improve it with the subsequent releases.
## About the Next Version: 3.0
We have added many new features with the v2.9. In the next version, we will completely focus on the **documentation, performance improvements** and and other enhancements as well as bug fixes.
For a long time, we were releasing a new feature version in every 2 weeks. We will continue to this approach after v3.0. But, as an exception to the v3.0, the development cycle will be ~4 weeks. **The planned release date for the v3.0 is the July 1, 2020**.

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

@ -22,19 +22,19 @@ Find `UseSqlServer()` calls in your solution, replace with `UseOracle()`. Check
In the `CreateDbContext()` method of the *YourProjectName*MigrationsDbContextFactory.cs, replace the following code block
```
```csharp
var builder = new DbContextOptionsBuilder<YourProjectNameMigrationsDbContext>()
.UseSqlServer(configuration.GetConnectionString("Default"));
```
with this one
```
```csharp
var builder = (DbContextOptionsBuilder<YourProjectNameMigrationsDbContext>)
new DbContextOptionsBuilder<YourProjectNameMigrationsDbContext>().UseOracle
(
configuration.GetConnectionString("Default")
);
```
```
> Depending on your solution structure, you may find more code files need to be changed.
@ -44,11 +44,6 @@ Oracle connection strings are different than SQL Server connection strings. So,
You typically will change the `appsettings.json` inside the `.DbMigrator` and `.Web` projects, but it depends on your solution structure.
A sample connection string for Oracle:
```
Data Source=localhost;User Id=myuser;Password=mypassword;
```
## Re-Generate the Migrations
The startup template uses [Entity Framework Core's Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/) by default.

@ -4,8 +4,27 @@ You can always check the milestone planning and the prioritized backlog issues o
While we will **continue to add other exciting features**, we will work on the following major items in the **middle term**:
* **gRPC integration** and implementation for all the pre-built modules.
* **Blazor UI** for the framework and all the pre-built modules.
* **.NET 5.0**! As Microsoft has announced that the .NET 5.0 will be released in November 2020, we will prepare for this change before and move to the .NET 5.0 just after Microsoft releases it. We hope a smooth transition.
Please create an issue on [the GitHub repository](https://github.com/abpframework/abp) for your feature requests, but first search in in the existing issues.
Beside this middle term goals, there are many features in the [backlog](https://github.com/abpframework/abp/milestone/2). Here, a list of some major items in the backlog;
* [#4098](https://github.com/abpframework/abp/issues/4098) / Blob Storing Azure provider.
* [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a **gRPC integration** infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](https://docs.abp.io/en/abp/latest/Modules/Index))
* [#236](https://github.com/abpframework/abp/issues/236) Resource based authorization system
* [#1754](https://github.com/abpframework/abp/issues/1754) / Multi-lingual entities
* [#347](https://github.com/abpframework/abp/issues/347) / Support MongoDB ACID transactions
* [#633](https://github.com/abpframework/abp/issues/633) / Realtime notification system
* [#57](https://github.com/abpframework/abp/issues/57) / Built-in CQRS infrastructure
* [#4222](https://github.com/abpframework/abp/issues/4222) / Kafka integration for the Distributed Event Bus
* [#336](https://github.com/abpframework/abp/issues/336) / Health Check abstraction
* [#2532](https://github.com/abpframework/abp/issues/2532), [#2564](https://github.com/abpframework/abp/issues/2465) / CosmosDB integration with EF Core and MongoDB API
* [#1168](https://github.com/abpframework/abp/issues/1168) / Official Vue UI startup template
* [#1638](https://github.com/abpframework/abp/issues/1638) Official React startup template
* [#4223](https://github.com/abpframework/abp/issues/4223) / WebHook system
* [#162](https://github.com/abpframework/abp/issues/162) / Azure ElasticDB Integration for multitenancy
* [#2296](https://github.com/abpframework/abp/issues/2296) / Feature toggling infrastructure
The backlog items are subject to change. We are adding new items and changing priorities based on the community feedbacks and goals of the project.
Vote for your favorite feature on the related GitHub issues (and write your thoughts). You can create an issue on [the GitHub repository](https://github.com/abpframework/abp) for your feature requests, but first search in in the existing issues.

@ -1,7 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\..\..\configureawait.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>aspnet-Volo.Abp.VirtualFileExplorer.DemoApp-234AF9E1-C3E0-4F8F-BD7D-840627CC8E46</UserSecretsId>

@ -1,12 +0,0 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.1.0</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.3" PrivateAssets="All" />
</ItemGroup>
</Project>

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\common.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>

Loading…
Cancel
Save