aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-12-21 16:32:38 +0800
committercrupest <crupest@outlook.com>2022-12-21 16:32:38 +0800
commit839e4fea3bd11b1b7e9e212e9fc2fbd3d94a6db1 (patch)
tree7a707dea3daa2c860a0bb215fef44bbcf76f4efc /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
parente3510f87617cebf4d11c9bf0e5e4ba640a5741e4 (diff)
downloadcrupest-839e4fea3bd11b1b7e9e212e9fc2fbd3d94a6db1.tar.gz
crupest-839e4fea3bd11b1b7e9e212e9fc2fbd3d94a6db1.tar.bz2
crupest-839e4fea3bd11b1b7e9e212e9fc2fbd3d94a6db1.zip
Develop secret api. v54
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs34
1 files changed, 30 insertions, 4 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
index 3b095b2..3d5c652 100644
--- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
@@ -15,7 +15,12 @@ public class ColumnInfo
public ColumnInfo(TableInfo table, IColumnMetadata metadata, Type clrType, IColumnTypeProvider typeProvider, ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<ColumnInfo>();
- _logger.LogInformation("Create column {} without corresponding property.", ColumnName);
+ if (metadata is null)
+ throw new ArgumentException("You must specify metadata for non-property column.");
+ if (metadata.TryGetValue(ColumnMetadataKeys.ColumnName, out var columnName))
+ _logger.LogInformation("Create column without property.", columnName);
+ else
+ throw new ArgumentException("You must specify name in metadata for non-property column.");
Table = table;
_metadata.Add(metadata);
@@ -28,7 +33,7 @@ public class ColumnInfo
public ColumnInfo(TableInfo table, PropertyInfo propertyInfo, IColumnTypeProvider typeProvider, ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<ColumnInfo>();
- _logger.LogInformation("Create column {} with corresponding property.", ColumnName);
+ _logger.LogInformation("Create column with property {}.", propertyInfo.Name);
Table = table;
PropertyInfo = propertyInfo;
@@ -90,7 +95,7 @@ public class ColumnInfo
if (value is null)
{
string methodName = ColumnName + "DefaultValueGenerator";
- result = Table.EntityType.GetMethod(methodName, BindingFlags.Static);
+ result = Table.EntityType.GetMethod(methodName, BindingFlags.Public | BindingFlags.Static);
}
else
{
@@ -131,7 +136,28 @@ public class ColumnInfo
public object? InvokeDefaultValueGenerator()
{
- return DefaultValueGeneratorMethod?.Invoke(null, new object?[] { this });
+ var method = this.DefaultValueGeneratorMethod;
+ if (method is null)
+ {
+ _logger.LogInformation("Try to invoke default value generator for column {} but it does not exist.", ColumnName);
+ return null;
+ }
+ var parameters = method.GetParameters();
+ if (parameters.Length == 0)
+ {
+ return method.Invoke(null, new object?[0]);
+ }
+ else if (parameters.Length == 1)
+ {
+ if (parameters[0].ParameterType != typeof(ColumnInfo))
+ throw new Exception("The default value generator method can only have a parameter of type ColumnInfo.");
+ return method.Invoke(null, new object?[] { this });
+ }
+ else
+ {
+ throw new Exception("The default value generator method can only have 0 or 1 parameter.");
+ }
+
}
public string GenerateCreateTableColumnString(string? dbProviderId = null)