Development Guide
Introduction
In this document, we will explain how to use ASP.NET Zero Power Tools without the Visual Studio extension.
Purpose of the ASP.NET Zero Power Tools VS Extension is to create an input file. So, in order to use it without extension, input file needs to be created manually.
You can find specification of the JSON file fields in the table below;
Settings
Name | Description |
---|---|
IsRegenerate | Set true if you have generated this entity before. |
MenuPosition | main or administration |
RelativeNamespace | Namespace of your entity (not including project's namespace) |
EntityName | Entity Name |
EntityNamePlural | Entity Name Plural |
TableName | Database Table Name (might be same with plural name) |
PrimaryKeyType | Type of primay key. Can be int , long , string , Guid |
BaseClass | Base class of your entity. Can be Entity , AuditedEntity , CreationAuditedEntity , FullAuditedEntity |
EntityHistory | Set true to track history of this entity. |
AutoMigration | true add-migration automatically, false do not add migration (you need to add migration manually) |
UpdateDatabase | true update-database automatically, false do not update-database (you need to update-database manually) |
CreateUserInterface | true creates/modifies ui layer files |
CreateViewOnly | true creates a view-only modal in actions button in table of your entity in ui |
CreateExcelExport | true adds excel report button in ui |
IsNonModalCRUDPage | true creates non-modal pages. |
PagePermission | Multitenancy"PagePermission":{"Host": [ISHOSTALLOWED],"Tenant":[ISTENANTALLOWED]} |
Properties | Properties of your entity. See 'Table 2' for more. |
NavigationProperties | Navigation properties of your entity. See 'Table 3' for more. |
EnumDefinitions | Enum definitions you use on your entity. See 'Table 4' for more. |
GenerateUnitTest | Generates unit tests for created application service class. |
GenerateUiTest | Generates UI tests for the created entity. |
GenerateOverridableEntity | Creates abstract base classes and their implementations. So, for the regenerate operation, your custom code will not be overwritten. |
Properties (Array):
Name | Description |
---|---|
Name | Property Name |
Type | Type of property. Can be string , bool , byte , short , DateTime , decimal , double , Guid , int , long , enum |
MaxLength | If type is string max length of string |
MinLength | If type is string min length of string |
Range | If type can have range value range of property"Range": {"IsRangeSet": [ISRANGESET],"MinimumValue": [MINVAL],"MaximumValue": [MAXVAL]} |
Required | Is property required |
Nullable | Is property nullable |
Regex | specifies the regex that this property should match |
UserInterface | Will this property be listed, have a filter and editable in ui?"UserInterface": {"List": true,"AdvancedFilter": true,"CreateOrUpdate": true} |
NavigationProperties (Array):
Name | Description |
---|---|
Namespace | Namespace of entity |
ForeignEntityName | Entity Name |
IdType | Type of Foreign Key. See Entity -> PrimaryKeyType |
IsNullable | Is nullable |
PropertyName | Property name (Property name for that entity which will store Foreign Key) |
DisplayPropertyName | Property name of foreign entity. It will be displayed by that property on pages. |
DuplicationNumber | If you have two navigation property that navigates to same foreign entity, number them starting from 1. If not, just skip this. |
RelationType | single is the only option. |
EnumDefinitions
Name | Description |
---|---|
Name | Name |
Namespace | Namespace |
EnumProperties | Properties "EnumProperties":[{"Name":"[PROPERYNAME]","Value":[PROPERYVALUE]}] |
Sample Input File
Input file includes a JSON string and it's name is the same as your entity's name. Here is a sample Products.Product.json:
{
"IsRegenerate": false,
"MenuPosition": "main",
"RelativeNamespace": "Products",
"EntityName": "Product",
"EntityNamePlural": "Products",
"TableName": "Products",
"PrimaryKeyType": "int",
"BaseClass": "Entity",
"EntityHistory": false,
"AutoMigration": true,
"UpdateDatabase": true,
"CreateUserInterface": true,
"CreateViewOnly": true,
"CreateExcelExport": true,
"IsNonModalCRUDPage":false,
"PagePermission": {
"Host": true,
"Tenant": true
},
"Properties": [
{
"Name": "Name",
"Type": "string",
"MaxLength": 25,
"MinLength": 2,
"Range": {
"IsRangeSet": false,
"MinimumValue": 0,
"MaximumValue": 0
},
"Required": true,
"Nullable": false,
"Regex": "",
"UserInterface": {
"List": true,
"AdvancedFilter": true,
"CreateOrUpdate": true
}
},
{
"Name": "Type",
"Type": "ProductType",
"MaxLength": 0,
"MinLength": 0,
"Range": {
"IsRangeSet": false,
"MinimumValue": 0,
"MaximumValue": 0
},
"Required": false,
"Nullable": false,
"Regex": "",
"UserInterface": {
"List": true,
"AdvancedFilter": true,
"CreateOrUpdate": true
}
}
],
"NavigationProperties": [
{
"Namespace": "Volosoft.RadToolExplainer.Authorization.Users",
"ForeignEntityName": "User",
"IdType": "long",
"IsNullable": true,
"PropertyName": "UserId",
"DisplayPropertyName": "Name",
"DuplicationNumber": 0,
"RelationType": "single"
}
],
"EnumDefinitions": [
{
"Name": "ProductType",
"Namespace": "Volosoft.RadToolExplainer",
"EnumProperties": [
{
"Name": "Liquid",
"Value": 1
},
{
"Name": "Solid",
"Value": 2
}
]
}
]
}
Guide To Create A New Input File
You have to fill the fields of the JSON file for your entity. However, some of the fields must match our constants. Here is the list of them:
MenuPosition : "main" | "admin"
RelativeNamespace: Namespace of your new entity. Doesn't include your company and project name.
PrimaryKeyType: "int" | "long" | "Guid"
BaseClass: "Entity" | "AuditedEntity" | "CreationAuditedEntity" | "FullAuditedEntity"
RelationType: Only "single" is valid for now.
DuplicationNumber: A number post-fix that is added to end of variable names to prevent duplicate if there are more than one foreign key addressing to same entity. '0' means no post-fix.
Properties
Properties are written as an array in JSON file. Add an object to that array for every property of your entity. There will be some unnecessary fields depending on property type. For example, you don't have to set regular expression for a numeric property or don't have to set range for a string.
A property should be one of those types:
- bool
- byte
- short
- DateTime
- decimal
- double
- Guid
- int
- long
- string
or one of the ENUMs you declared in "EnumDefinitions".
How To Run Power Tools
You can use the command below to run it:
dotnet AspNetZeroRadTool.dll YourEntity.Json
Notes
- AspNetZeroRadTool folder is placed under aspnet-core folder of your solution. You have to place the json file and run the command in there.
- Please Keep in mind that JSON file is completely case sensitive.
- Auto add-migration and update-database functions are disabled.
- If you are working on ASP.NET Core & Angular template, after generating the entity via Power Tools, run your *.Web.Host project and then run "./angular/nswag/refresh.bat" to update service-proxies.ts.