mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 01:58:13 +08:00
Synchronization code
This commit is contained in:
@@ -40,5 +40,43 @@ namespace SqlSugar
|
||||
|
||||
return dynamicType;
|
||||
}
|
||||
|
||||
public static Type CreateDynamicClass(TypeBuilder typeBuilder,TypeBuilder typeBuilderChild,List<PropertyMetadata> properties, List<CustomAttributeBuilder> classCustomAttributes = null)
|
||||
{
|
||||
|
||||
if (classCustomAttributes != null)
|
||||
{
|
||||
foreach (var attributeBuilder in classCustomAttributes)
|
||||
{
|
||||
typeBuilder.SetCustomAttribute(attributeBuilder);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (PropertyMetadata property in properties)
|
||||
{
|
||||
var type = property.Type;
|
||||
if (type == typeof(DynamicOneselfType))
|
||||
{
|
||||
type = typeBuilder;
|
||||
}
|
||||
else if (type == typeof(DynamicOneselfTypeList))
|
||||
{
|
||||
type = typeof(List<>).MakeGenericType(typeBuilder);
|
||||
}
|
||||
else if (type == typeof(NestedObjectType))
|
||||
{
|
||||
type = typeBuilderChild;
|
||||
}
|
||||
else if (type == typeof(NestedObjectTypeList))
|
||||
{
|
||||
type = typeof(List<>).MakeGenericType(typeBuilderChild);
|
||||
}
|
||||
EmitTool.CreateProperty(typeBuilder, property.Name, type, property.CustomAttributes);
|
||||
}
|
||||
|
||||
Type dynamicType = typeBuilder.CreateTypeInfo().AsType();
|
||||
|
||||
return dynamicType;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -18,4 +18,15 @@ namespace SqlSugar
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class NestedObjectType
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class NestedObjectTypeList
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -6,6 +6,8 @@ using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.AccessControl;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
@@ -64,6 +66,37 @@ namespace SqlSugar
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
#region BuilderTypes
|
||||
public Tuple<Type, Type> BuilderTypes(DynamicProperyBuilder dynamicBuilderB)
|
||||
{
|
||||
if (IsCache)
|
||||
{
|
||||
var key1 = baseBuilder.entityName + string.Join("_", baseBuilder.propertyAttr.Select(it => it.Name + it.Type.Name));
|
||||
var key2 = dynamicBuilderB.baseBuilder.entityName + string.Join("_", dynamicBuilderB.baseBuilder.propertyAttr.Select(it => it.Name + it.Type.Name));
|
||||
return new ReflectionInoCacheService().GetOrCreate(key1 + key2, () =>
|
||||
{
|
||||
Tuple<Type, Type> result = GetBuilderTypes(dynamicBuilderB);
|
||||
return result;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Tuple<Type, Type> result = GetBuilderTypes(dynamicBuilderB);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
private Tuple<Type,Type> GetBuilderTypes(DynamicProperyBuilder dynamicBuilderB)
|
||||
{
|
||||
DynamicProperyBuilder dynamicBuilderA = this;
|
||||
TypeBuilder typeBuilderA = EmitTool.CreateTypeBuilder(dynamicBuilderA.baseBuilder.entityName, TypeAttributes.Public, dynamicBuilderA.baseBuilder.baseType, dynamicBuilderA.baseBuilder.interfaces);
|
||||
TypeBuilder typeBuilderB = EmitTool.CreateTypeBuilder(dynamicBuilderB.baseBuilder.entityName, TypeAttributes.Public, dynamicBuilderB.baseBuilder.baseType, dynamicBuilderB.baseBuilder.interfaces);
|
||||
DynamicBuilderHelper.CreateDynamicClass(typeBuilderA, typeBuilderB, dynamicBuilderA.baseBuilder.propertyAttr, dynamicBuilderA.baseBuilder.entityAttr);
|
||||
DynamicBuilderHelper.CreateDynamicClass(typeBuilderB, typeBuilderA, dynamicBuilderB.baseBuilder.propertyAttr, dynamicBuilderB.baseBuilder.entityAttr);
|
||||
return new Tuple<Type, Type>(typeBuilderB.CreateTypeInfo().AsType(), typeBuilderA.CreateTypeInfo().AsType());
|
||||
}
|
||||
#endregion
|
||||
|
||||
public CustomAttributeBuilder BuildNavigateAttribute(Navigate navigate)
|
||||
{
|
||||
NavigateType navigatType = navigate.NavigatType;
|
||||
|
Reference in New Issue
Block a user