private string GetClassDeclaration(IClassMap classMap, ICodeMap codeMap) { if (codeMap.CodeLanguage == CodeLanguage.CSharp) { return("public class " + classMap.GetName()); } if (codeMap.CodeLanguage == CodeLanguage.VB) { return("Public Class " + classMap.GetName()); } throw new IAmOpenSourcePleaseImplementMeException(""); }
public static void GenerateRepositoryGetAllObjectsMethod(IClassMap classMap, CodeTypeDeclaration classDecl) { CodeMemberMethod methodMember = new CodeMemberMethod(); methodMember.Name = GetRepositoryGetAllObjectsMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); CodeTypeReference listTypeReference = new CodeTypeReference(typeof(IList)); methodMember.ReturnType = listTypeReference; methodMember.Attributes = MemberAttributes.Public; CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeTypeOfExpression typeOfExp = new CodeTypeOfExpression(typeReference); CodeMethodInvokeExpression listInit = new CodeMethodInvokeExpression(contextVar, "GetObjects", new CodeExpression[] { typeOfExp }); CodeVariableDeclarationStatement listVarDecl = new CodeVariableDeclarationStatement(typeof(IList), "list", listInit); CodeVariableReferenceExpression listVar = new CodeVariableReferenceExpression("list"); methodMember.Statements.Add(listVarDecl); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(listVar); methodMember.Statements.Add(returnStmt); classDecl.Members.Add(methodMember); }
public static void GenerateRepositoryDeleteObjectMethod(IClassMap classMap, CodeTypeDeclaration classDecl) { CodeMemberMethod methodMember = new CodeMemberMethod(); methodMember.Name = GetRepositoryDeleteObjectMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); methodMember.Attributes = MemberAttributes.Public; CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(typeReference, MakeCamelCase(classMap.GetName())); methodMember.Parameters.Add(parameter); CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(classMap.GetName())); CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeMethodInvokeExpression deleteCall = new CodeMethodInvokeExpression(contextVar, "DeleteObject", new CodeExpression[] { argExp }); methodMember.Statements.Add(deleteCall); CodeMethodInvokeExpression commitCtx = new CodeMethodInvokeExpression(contextVar, "Commit", new CodeExpression[] {}); methodMember.Statements.Add(commitCtx); classDecl.Members.Add(methodMember); }
public virtual MarshalQuery FromQuery(IQuery query) { MarshalQuery mq = new MarshalQuery(); if (query is NPathQuery) { mq.QueryType = "NPathQuery"; } if (query is SqlQuery) { mq.QueryType = "SqlQuery"; } IClassMap classMap = Context.DomainMap.MustGetClassMap(query.PrimaryType); mq.PrimitiveType = classMap.GetName(); mq.QueryString = query.Query.ToString(); foreach (IQueryParameter p in query.Parameters) { MarshalParameter mp = new MarshalParameter(); mp.DbType = p.DbType; mp.Name = p.Name; mp.Value = FromParameterValue(p); mq.Parameters.Add(mp); } return(mq); }
//Should have no refresh issues public override void LoadObject(ref object obj) { if (this.url.Length < 1) { throw new NPersistException("You must specify an url to your NPersist Web Service in your WebServiceRemotingEngine!"); } RemotingService rs = new RemotingService(this.Context, url); IClassMap classMap = Context.DomainMap.MustGetClassMap(obj.GetType()); string id = Context.ObjectManager.GetObjectIdentity(obj); bool doUseCompression = this.useCompression; if (this.compressor == null) { doUseCompression = false; } string result = rs.LoadObject(classMap.GetName(), id, this.domainKey, doUseCompression); if (useCompression && this.compressor != null) { result = this.compressor.Decompress(result); } MarshalObject mo = (MarshalObject)Formatter.Deserialize(result, typeof(MarshalObject)); IMarshalingTransformer transformer = new MarshalingTransformer(Context); Context.IdentityMap.RegisterLoadedObject(obj); transformer.ToObject(mo, ref obj); }
public virtual MarshalReference FromObjectAsReference(object sourceObject) { IClassMap classMap = Context.DomainMap.MustGetClassMap(sourceObject.GetType()); MarshalReference mr = new MarshalReference(); mr.Type = classMap.GetName(); foreach (IPropertyMap propertyMap in classMap.GetIdentityPropertyMaps()) { if (propertyMap.ReferenceType == ReferenceType.None) { if (propertyMap.IsCollection) { } else { mr.Value.ReferenceProperties.Add(FromProperty(sourceObject, propertyMap)); } } else { if (propertyMap.IsCollection) { } else { mr.Value.ReferenceProperties.Add(FromReference(sourceObject, propertyMap)); } } } return(mr); }
public override string GetTypeNameFromType(Type type) { IClassMap classMap = this.context.DomainMap.GetClassMap(type); if (classMap != null) { return(classMap.GetName()); } return(type.Name); }
public virtual MarshalObject FromObject(object sourceObject, bool upForCreation) { IClassMap classMap = Context.DomainMap.MustGetClassMap(sourceObject.GetType()); MarshalObject mo = new MarshalObject(); mo.Type = classMap.GetName(); if (upForCreation) { if (classMap.HasIdAssignedBySource()) { mo.TempId = Context.ObjectManager.GetObjectIdentity(sourceObject); } } PropertyStatus propStatus; foreach (IPropertyMap propertyMap in classMap.GetAllPropertyMaps()) { propStatus = Context.GetPropertyStatus(sourceObject, propertyMap.Name); if (propStatus != PropertyStatus.NotLoaded || upForCreation) { if (propertyMap.ReferenceType == ReferenceType.None) { if (propertyMap.IsCollection) { } else { if (upForCreation && propertyMap.GetIsAssignedBySource()) { } else { mo.Properties.Add(FromProperty(sourceObject, propertyMap)); } } } else { if (propertyMap.IsCollection) { //mo.ReferenceLists.Add(FromReferenceList(sourceObject, propertyMap)); } else { mo.References.Add(FromReference(sourceObject, propertyMap)); } } } } return(mo); }
public static CodeMemberMethod GenerateFactoryMethod(IClassMap classMap, IList propertyMaps) { CodeMemberMethod methodMember = new CodeMemberMethod(); methodMember.Name = GetFactoryMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); methodMember.ReturnType = typeReference; methodMember.Attributes = MemberAttributes.Public; foreach (IPropertyMap propertyMap in propertyMaps) { CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(new CodeTypeReference(propertyMap.DataType), MakeCamelCase(propertyMap.Name)); methodMember.Parameters.Add(parameter); } CodeVariableDeclarationStatement contextVarDecl = new CodeVariableDeclarationStatement("IContext", "context", null); CodeVariableReferenceExpression contextVar = new CodeVariableReferenceExpression("context"); methodMember.Statements.Add(contextVarDecl); CodeTypeOfExpression typeOfExp = new CodeTypeOfExpression(typeReference); CodeMethodInvokeExpression newObjectInit = new CodeMethodInvokeExpression(contextVar, "CreateObject", new CodeExpression[] { typeOfExp }); CodeCastExpression castExp = new CodeCastExpression(typeReference, newObjectInit); CodeVariableDeclarationStatement newObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), MakeCamelCase(classMap.GetName()), castExp); CodeVariableReferenceExpression newObjectVar = new CodeVariableReferenceExpression(MakeCamelCase(classMap.GetName())); methodMember.Statements.Add(newObjectVarDecl); foreach (IPropertyMap propertyMap in propertyMaps) { CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(propertyMap.Name)); CodeVariableReferenceExpression propExp = new CodeVariableReferenceExpression(MakeCamelCase(classMap.Name) + "." + propertyMap.Name); CodeAssignStatement assignStatement = new CodeAssignStatement(propExp, argExp); methodMember.Statements.Add(assignStatement); } CodeMethodInvokeExpression commitCtx = new CodeMethodInvokeExpression(contextVar, "Commit", new CodeExpression[] {}); methodMember.Statements.Add(commitCtx); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(newObjectVar); methodMember.Statements.Add(returnStmt); return(methodMember); }
private MarshalReference FromReference(object sourceObject, IPropertyMap propertyMap) { MarshalReference mr = new MarshalReference(); mr.Name = propertyMap.Name; object value = Context.ObjectManager.GetPropertyValue(sourceObject, propertyMap.Name); if (value != null) { IClassMap classMap = Context.DomainMap.MustGetClassMap(value.GetType()); mr.Type = classMap.GetName(); mr.IsNull = false; } else { IClassMap refClassMap = propertyMap.MustGetReferencedClassMap(); if (refClassMap != null) { mr.Type = refClassMap.GetName(); } mr.IsNull = true; } mr.Value = FromPropertyReference(sourceObject, value, propertyMap); if (Context.ObjectManager.HasOriginalValues(sourceObject, propertyMap.Name)) { object orgValue = Context.ObjectManager.GetOriginalPropertyValue(sourceObject, propertyMap.Name); mr.OriginalValue = FromPropertyReference(sourceObject, orgValue, propertyMap); mr.HasOriginal = true; if (orgValue != null) { IClassMap orgClassMap = Context.DomainMap.MustGetClassMap(orgValue.GetType()); mr.OriginalType = orgClassMap.GetName(); mr.WasNull = false; } else { IClassMap refClassMap = propertyMap.MustGetReferencedClassMap(); if (refClassMap != null) { mr.OriginalType = refClassMap.GetName(); } mr.WasNull = true; } } else { //mr.OriginalValue = FromPropertyReference(sourceObject, null, propertyMap); mr.HasOriginal = false; } return(mr); }
public static CodeMemberMethod GenerateFactoryMethod(IClassMap classMap, IList propertyMaps) { CodeMemberMethod methodMember = new CodeMemberMethod() ; methodMember.Name = GetFactoryMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); methodMember.ReturnType = typeReference; methodMember.Attributes = MemberAttributes.Public; foreach(IPropertyMap propertyMap in propertyMaps) { CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(new CodeTypeReference(propertyMap.DataType), MakeCamelCase(propertyMap.Name)); methodMember.Parameters.Add(parameter); } CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeTypeOfExpression typeOfExp = new CodeTypeOfExpression(typeReference) ; CodeMethodInvokeExpression newObjectInit = new CodeMethodInvokeExpression(contextVar, "CreateObject", new CodeExpression[] { typeOfExp } ) ; CodeCastExpression castExp = new CodeCastExpression(typeReference, newObjectInit) ; CodeVariableDeclarationStatement newObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), MakeCamelCase(classMap.GetName()), castExp) ; CodeVariableReferenceExpression newObjectVar = new CodeVariableReferenceExpression(MakeCamelCase(classMap.GetName())); methodMember.Statements.Add(newObjectVarDecl); foreach(IPropertyMap propertyMap in propertyMaps) { CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(propertyMap.Name)); CodeVariableReferenceExpression propExp = new CodeVariableReferenceExpression(MakeCamelCase(classMap.Name) + "." + propertyMap.Name); CodeAssignStatement assignStatement = new CodeAssignStatement(propExp, argExp); methodMember.Statements.Add(assignStatement); } CodeMethodInvokeExpression commitCtx = new CodeMethodInvokeExpression(contextVar, "Commit", new CodeExpression[] {} ) ; methodMember.Statements.Add(commitCtx); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(newObjectVar) ; methodMember.Statements.Add(returnStmt); return methodMember; }
private CodeNamespace ClassMapToCodeNamespace(IClassMap classMap) { CodeNamespace domainNamespace = new CodeNamespace(classMap.GetFullNamespace()); CodeTypeDeclaration classDecl = new CodeTypeDeclaration(classMap.GetName()); if (classMap.ClassType == ClassType.Default || classMap.ClassType == ClassType.Class) { classDecl.IsClass = true; IClassMap super = classMap.GetInheritedClassMap(); if (super != null) { CodeTypeReference superDecl = new CodeTypeReference(super.GetFullName()); classDecl.BaseTypes.Add(superDecl); } foreach (IPropertyMap propertyMap in classMap.PropertyMaps) { classDecl.Members.Add(PropertyMapToCodeMemberField(propertyMap)); classDecl.Members.Add(PropertyMapToCodeMemberProperty(propertyMap)); } } else if (classMap.ClassType == ClassType.Enum) { classDecl.IsEnum = true; foreach (IEnumValueMap enumValueMap in classMap.GetEnumValueMaps()) { classDecl.Members.Add(EnumValueMapToCodeMemberField(enumValueMap)); } } domainNamespace.Types.Add(classDecl); return(domainNamespace); }
public static string GetFactoryClassName(IClassMap classMap) { string name = classMap.GetName() + "Factory" ; return name; }
public static string GetDLinqClassName(IClassMap classMap) { string name = classMap.GetName() ; return name; }
public static string GetFactoryMethodName(IClassMap classMap) { string name = "Create" + classMap.GetName(); return(name); }
public static void GenerateRepositoryDeleteObjectMethod(IClassMap classMap, CodeTypeDeclaration classDecl) { CodeMemberMethod methodMember = new CodeMemberMethod() ; methodMember.Name = GetRepositoryDeleteObjectMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); methodMember.Attributes = MemberAttributes.Public; CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(typeReference, MakeCamelCase(classMap.GetName())); methodMember.Parameters.Add(parameter); CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(classMap.GetName())); CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeMethodInvokeExpression deleteCall = new CodeMethodInvokeExpression(contextVar, "DeleteObject", new CodeExpression[] { argExp } ) ; methodMember.Statements.Add(deleteCall); CodeMethodInvokeExpression commitCtx = new CodeMethodInvokeExpression(contextVar, "Commit", new CodeExpression[] {} ) ; methodMember.Statements.Add(commitCtx); classDecl.Members.Add(methodMember); }
public static string GetFactoryClassName(IClassMap classMap) { string name = classMap.GetName() + "Factory"; return(name); }
public static void GenerateRepositoryGetAllObjectsMethod(IClassMap classMap, CodeTypeDeclaration classDecl) { CodeMemberMethod methodMember = new CodeMemberMethod() ; methodMember.Name = GetRepositoryGetAllObjectsMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); CodeTypeReference listTypeReference = new CodeTypeReference(typeof(IList)); methodMember.ReturnType = listTypeReference; methodMember.Attributes = MemberAttributes.Public; CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeTypeOfExpression typeOfExp = new CodeTypeOfExpression(typeReference) ; CodeMethodInvokeExpression listInit = new CodeMethodInvokeExpression(contextVar, "GetObjects", new CodeExpression[] { typeOfExp } ) ; CodeVariableDeclarationStatement listVarDecl = new CodeVariableDeclarationStatement(typeof(IList), "list", listInit) ; CodeVariableReferenceExpression listVar = new CodeVariableReferenceExpression("list"); methodMember.Statements.Add(listVarDecl); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(listVar) ; methodMember.Statements.Add(returnStmt); classDecl.Members.Add(methodMember); }
public static void GenerateRepositoryUpdateObjectMethod(IClassMap classMap, CodeTypeDeclaration classDecl) { IList propertyMaps = classMap.GetAllPropertyMaps(); IList idPropertyMaps = classMap.GetIdentityPropertyMaps(); CodeMemberMethod methodMember = new CodeMemberMethod(); methodMember.Name = GetRepositoryUpdateObjectMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); methodMember.ReturnType = typeReference; methodMember.Attributes = MemberAttributes.Public; foreach (IPropertyMap propertyMap in propertyMaps) { if (!propertyMap.IsCollection) { CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(new CodeTypeReference(propertyMap.DataType), MakeCamelCase(propertyMap.Name)); methodMember.Parameters.Add(parameter); } } CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeExpression[] createParams = new CodeExpression[idPropertyMaps.Count]; int i = 0; foreach (IPropertyMap idPropertyMap in idPropertyMaps) { CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(idPropertyMap.Name)); createParams[i] = argExp; i++; } CodeMethodInvokeExpression newObjectInit = new CodeMethodInvokeExpression(thisExp, GetRepositoryGetByIdentityMethodName(classMap), createParams); CodeVariableDeclarationStatement newObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), MakeCamelCase(classMap.GetName()), newObjectInit); CodeVariableReferenceExpression newObjectVar = new CodeVariableReferenceExpression(MakeCamelCase(classMap.GetName())); methodMember.Statements.Add(newObjectVarDecl); foreach (IPropertyMap propertyMap in propertyMaps) { if (!propertyMap.IsIdentity) { if (!propertyMap.IsCollection) { CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(propertyMap.Name)); CodeVariableReferenceExpression propExp = new CodeVariableReferenceExpression(MakeCamelCase(classMap.Name) + "." + propertyMap.Name); CodeAssignStatement assignStatement = new CodeAssignStatement(propExp, argExp); methodMember.Statements.Add(assignStatement); } } } CodeMethodInvokeExpression commitCtx = new CodeMethodInvokeExpression(contextVar, "Commit", new CodeExpression[] {}); methodMember.Statements.Add(commitCtx); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(newObjectVar); methodMember.Statements.Add(returnStmt); classDecl.Members.Add(methodMember); }
public static void GenerateRepositoryGetByIdentityMethod(IClassMap classMap, CodeTypeDeclaration classDecl, bool tryMethod) { IList propertyMaps = classMap.GetIdentityPropertyMaps(); CodeMemberMethod methodMember = new CodeMemberMethod(); if (tryMethod) { methodMember.Name = GetRepositoryGetByIdentityMethodName(classMap); } else { methodMember.Name = GetRepositoryTryGetByIdentityMethodName(classMap); } CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); methodMember.ReturnType = typeReference; methodMember.Attributes = MemberAttributes.Public; foreach (IPropertyMap propertyMap in propertyMaps) { CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(new CodeTypeReference(propertyMap.DataType), MakeCamelCase(propertyMap.Name)); methodMember.Parameters.Add(parameter); } CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeVariableDeclarationStatement dummyObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), "identityObject"); CodeVariableReferenceExpression dummyObjectVar = new CodeVariableReferenceExpression("identityObject"); CodeObjectCreateExpression dummyObjectCreateExpr = new CodeObjectCreateExpression(typeReference, new CodeExpression[] {}); CodeAssignStatement assignDummyStatement = new CodeAssignStatement(dummyObjectVar, dummyObjectCreateExpr); methodMember.Statements.Add(dummyObjectVarDecl); methodMember.Statements.Add(assignDummyStatement); foreach (IPropertyMap propertyMap in propertyMaps) { CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(propertyMap.Name)); CodeVariableReferenceExpression propExp = new CodeVariableReferenceExpression("identityObject" + "." + propertyMap.Name); CodeAssignStatement assignStatement = new CodeAssignStatement(propExp, argExp); methodMember.Statements.Add(assignStatement); } CodeTypeOfExpression typeOfExp = new CodeTypeOfExpression(typeReference); CodeMethodInvokeExpression newObjectInit = null; if (tryMethod) { newObjectInit = new CodeMethodInvokeExpression(contextVar, "GetObjectById", new CodeExpression[] { dummyObjectVar, typeOfExp }); } else { newObjectInit = new CodeMethodInvokeExpression(contextVar, "TryGetObjectById", new CodeExpression[] { dummyObjectVar, typeOfExp }); } CodeCastExpression castExp = new CodeCastExpression(typeReference, newObjectInit); CodeVariableDeclarationStatement newObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), MakeCamelCase(classMap.GetName()), castExp); CodeVariableReferenceExpression newObjectVar = new CodeVariableReferenceExpression(MakeCamelCase(classMap.GetName())); methodMember.Statements.Add(newObjectVarDecl); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(newObjectVar); methodMember.Statements.Add(returnStmt); classDecl.Members.Add(methodMember); }
public static string GetFactoryMethodName(IClassMap classMap) { string name = "Create" + classMap.GetName() ; return name; }
private string GetClassDeclaration(IClassMap classMap, ICodeMap codeMap) { if (codeMap.CodeLanguage == CodeLanguage.CSharp) return "public class " + classMap.GetName(); if (codeMap.CodeLanguage == CodeLanguage.VB) return "Public Class " + classMap.GetName(); throw new IAmOpenSourcePleaseImplementMeException(""); }
public static void GenerateRepositoryGetByIdentityMethod(IClassMap classMap, CodeTypeDeclaration classDecl, bool tryMethod) { IList propertyMaps = classMap.GetIdentityPropertyMaps(); CodeMemberMethod methodMember = new CodeMemberMethod() ; if (tryMethod) methodMember.Name = GetRepositoryGetByIdentityMethodName(classMap); else methodMember.Name = GetRepositoryTryGetByIdentityMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); methodMember.ReturnType = typeReference; methodMember.Attributes = MemberAttributes.Public; foreach(IPropertyMap propertyMap in propertyMaps) { CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(new CodeTypeReference(propertyMap.DataType), MakeCamelCase(propertyMap.Name)); methodMember.Parameters.Add(parameter); } CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeVariableDeclarationStatement dummyObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), "identityObject") ; CodeVariableReferenceExpression dummyObjectVar = new CodeVariableReferenceExpression("identityObject"); CodeObjectCreateExpression dummyObjectCreateExpr = new CodeObjectCreateExpression(typeReference, new CodeExpression[] {} ); CodeAssignStatement assignDummyStatement = new CodeAssignStatement(dummyObjectVar, dummyObjectCreateExpr); methodMember.Statements.Add(dummyObjectVarDecl); methodMember.Statements.Add(assignDummyStatement); foreach(IPropertyMap propertyMap in propertyMaps) { CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(propertyMap.Name)); CodeVariableReferenceExpression propExp = new CodeVariableReferenceExpression("identityObject" + "." + propertyMap.Name); CodeAssignStatement assignStatement = new CodeAssignStatement(propExp, argExp); methodMember.Statements.Add(assignStatement); } CodeTypeOfExpression typeOfExp = new CodeTypeOfExpression(typeReference) ; CodeMethodInvokeExpression newObjectInit = null; if (tryMethod) newObjectInit = new CodeMethodInvokeExpression(contextVar, "GetObjectById", new CodeExpression[] { dummyObjectVar, typeOfExp } ) ; else newObjectInit = new CodeMethodInvokeExpression(contextVar, "TryGetObjectById", new CodeExpression[] { dummyObjectVar, typeOfExp } ) ; CodeCastExpression castExp = new CodeCastExpression(typeReference, newObjectInit) ; CodeVariableDeclarationStatement newObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), MakeCamelCase(classMap.GetName()), castExp) ; CodeVariableReferenceExpression newObjectVar = new CodeVariableReferenceExpression(MakeCamelCase(classMap.GetName())); methodMember.Statements.Add(newObjectVarDecl); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(newObjectVar) ; methodMember.Statements.Add(returnStmt); classDecl.Members.Add(methodMember); }
public static void GenerateRepositoryUpdateObjectMethod(IClassMap classMap, CodeTypeDeclaration classDecl) { IList propertyMaps = classMap.GetAllPropertyMaps(); IList idPropertyMaps = classMap.GetIdentityPropertyMaps(); CodeMemberMethod methodMember = new CodeMemberMethod() ; methodMember.Name = GetRepositoryUpdateObjectMethodName(classMap); CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); methodMember.ReturnType = typeReference; methodMember.Attributes = MemberAttributes.Public; foreach(IPropertyMap propertyMap in propertyMaps) { if (!propertyMap.IsCollection) { CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(new CodeTypeReference(propertyMap.DataType), MakeCamelCase(propertyMap.Name)); methodMember.Parameters.Add(parameter); } } CodeThisReferenceExpression thisExp = new CodeThisReferenceExpression(); CodeFieldReferenceExpression contextVar = new CodeFieldReferenceExpression(thisExp, "context"); CodeExpression[] createParams = new CodeExpression[idPropertyMaps.Count]; int i = 0; foreach(IPropertyMap idPropertyMap in idPropertyMaps) { CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(idPropertyMap.Name)); createParams[i] = argExp; i++; } CodeMethodInvokeExpression newObjectInit = new CodeMethodInvokeExpression(thisExp, GetRepositoryGetByIdentityMethodName(classMap), createParams ) ; CodeVariableDeclarationStatement newObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), MakeCamelCase(classMap.GetName()), newObjectInit) ; CodeVariableReferenceExpression newObjectVar = new CodeVariableReferenceExpression(MakeCamelCase(classMap.GetName())); methodMember.Statements.Add(newObjectVarDecl); foreach(IPropertyMap propertyMap in propertyMaps) { if (!propertyMap.IsIdentity) { if (!propertyMap.IsCollection) { CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(propertyMap.Name)); CodeVariableReferenceExpression propExp = new CodeVariableReferenceExpression(MakeCamelCase(classMap.Name) + "." + propertyMap.Name); CodeAssignStatement assignStatement = new CodeAssignStatement(propExp, argExp); methodMember.Statements.Add(assignStatement); } } } CodeMethodInvokeExpression commitCtx = new CodeMethodInvokeExpression(contextVar, "Commit", new CodeExpression[] {} ) ; methodMember.Statements.Add(commitCtx); CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(newObjectVar) ; methodMember.Statements.Add(returnStmt); classDecl.Members.Add(methodMember); }
// public static void GenerateFactoryMethods(IClassMap classMap, CodeTypeDeclaration classDecl) // { // IList propertyMaps = GetRequiredPropertyMaps(classMap); // classDecl.Members.Add(GenerateFactoryMethod(classMap, propertyMaps)); // // IList optionalPropertyMaps = GetOptionalPropertyMaps(classMap); // if (optionalPropertyMaps.Count > 0) // { // foreach (IPropertyMap propertyMap in optionalPropertyMaps) // propertyMaps.Add(propertyMap); // // classDecl.Members.Add(GenerateFactoryMethod(classMap, propertyMaps)); // } // } // public static CodeMemberMethod GenerateFactoryMethod(IClassMap classMap, IList propertyMaps) // { // // CodeMemberMethod methodMember = new CodeMemberMethod() ; // methodMember.Name = GetFactoryMethodName(classMap); // // CodeTypeReference typeReference = new CodeTypeReference(classMap.GetName()); // methodMember.ReturnType = typeReference; // // methodMember.Attributes = MemberAttributes.Public; // // foreach(IPropertyMap propertyMap in propertyMaps) // { // CodeParameterDeclarationExpression parameter = new CodeParameterDeclarationExpression(new CodeTypeReference(propertyMap.DataType), MakeCamelCase(propertyMap.Name)); // methodMember.Parameters.Add(parameter); // } // // CodeVariableDeclarationStatement contextVarDecl = new CodeVariableDeclarationStatement("IContext", "context", null) ; // CodeVariableReferenceExpression contextVar = new CodeVariableReferenceExpression("context"); // // methodMember.Statements.Add(contextVarDecl); // // CodeTypeOfExpression typeOfExp = new CodeTypeOfExpression(typeReference) ; // CodeMethodInvokeExpression newObjectInit = new CodeMethodInvokeExpression(contextVar, "CreateObject", new CodeExpression[] { typeOfExp } ) ; // // CodeCastExpression castExp = new CodeCastExpression(typeReference, newObjectInit) ; // // CodeVariableDeclarationStatement newObjectVarDecl = new CodeVariableDeclarationStatement(classMap.GetName(), MakeCamelCase(classMap.GetName()), castExp) ; // CodeVariableReferenceExpression newObjectVar = new CodeVariableReferenceExpression(MakeCamelCase(classMap.GetName())); // // methodMember.Statements.Add(newObjectVarDecl); // // foreach(IPropertyMap propertyMap in propertyMaps) // { // CodeArgumentReferenceExpression argExp = new CodeArgumentReferenceExpression(MakeCamelCase(propertyMap.Name)); // CodeVariableReferenceExpression propExp = new CodeVariableReferenceExpression(MakeCamelCase(classMap.Name) + "." + propertyMap.Name); // CodeAssignStatement assignStatement = new CodeAssignStatement(propExp, argExp); // methodMember.Statements.Add(assignStatement); // } // // CodeMethodInvokeExpression commitCtx = new CodeMethodInvokeExpression(contextVar, "Commit", new CodeExpression[] {} ) ; // // methodMember.Statements.Add(commitCtx); // // CodeMethodReturnStatement returnStmt = new CodeMethodReturnStatement(newObjectVar) ; // // methodMember.Statements.Add(returnStmt); // // return methodMember; // // } #endregion #region Template public static string GetDLinqClassName(IClassMap classMap) { string name = classMap.GetName(); return(name); }
private CodeNamespace ClassMapToCodeNamespace(IClassMap classMap) { CodeNamespace domainNamespace = new CodeNamespace(classMap.GetFullNamespace()) ; CodeTypeDeclaration classDecl = new CodeTypeDeclaration(classMap.GetName()) ; if (classMap.ClassType == ClassType.Default || classMap.ClassType == ClassType.Class) { classDecl.IsClass = true; IClassMap super = classMap.GetInheritedClassMap(); if (super != null) { CodeTypeReference superDecl = new CodeTypeReference(super.GetFullName()) ; classDecl.BaseTypes.Add(superDecl); } foreach (IPropertyMap propertyMap in classMap.PropertyMaps) { classDecl.Members.Add(PropertyMapToCodeMemberField(propertyMap)); classDecl.Members.Add(PropertyMapToCodeMemberProperty(propertyMap)); } } else if (classMap.ClassType == ClassType.Enum) { classDecl.IsEnum = true; foreach (IEnumValueMap enumValueMap in classMap.GetEnumValueMaps()) { classDecl.Members.Add(EnumValueMapToCodeMemberField(enumValueMap)); } } domainNamespace.Types.Add(classDecl); return domainNamespace; }