private void Not_Well_Form_Association(WCTestData testData, IPersistentReferenceMemberInfo referenceMemberInfo, CodeValidator codeValidator) { referenceMemberInfo.CreateAssociation("invalid"); var result = referenceMemberInfo.Owner.PersistentAssemblyInfo.Validate(AssemblyPath); result.Valid.Should().Be(false); result.Message.Should().Contain("Malformed association 'invalid'"); }
void CreateTemplateInfo(IPersistentReferenceMemberInfo persistentReferenceMemberInfo, Column column, ForeignKeyCalculator _foreignKeyCalculator) { var table = (Table)column.Parent; var database = table.Parent; var foreignKey = _foreignKeyCalculator.GetForeignKey(database, column.Name, table); var templateInfo = _objectSpace.CreateWCObject<ITemplateInfo>(); templateInfo.Name = persistentReferenceMemberInfo.CodeTemplateInfo.CodeTemplate.TemplateType.ToString(); templateInfo.TemplateCode = _foreignKeyCalculator.GetRefTableForeignKey(foreignKey, column.Name).Columns.OfType<ForeignKeyColumn>(). Where(keyColumn => keyColumn.ReferencedColumn == column.Name).Single().Name; persistentReferenceMemberInfo.TemplateInfos.Add(templateInfo); }
public void CreateCollection(IPersistentReferenceMemberInfo persistentReferenceMemberInfo, IPersistentClassInfo owner) { var persistentCollectionMemberInfo = _objectSpace.CreateWCObject<IPersistentCollectionMemberInfo>(); persistentReferenceMemberInfo.ReferenceClassInfo.OwnMembers.Add(persistentCollectionMemberInfo); persistentCollectionMemberInfo.Name = persistentReferenceMemberInfo.Owner.Name + persistentReferenceMemberInfo.Name + "s"; persistentCollectionMemberInfo.Owner = persistentReferenceMemberInfo.ReferenceClassInfo; persistentCollectionMemberInfo.CollectionClassInfo = owner; persistentCollectionMemberInfo.SetDefaultTemplate(TemplateType.XPCollectionMember); var persistentAssociationAttribute = _objectSpace.CreateWCObject<IPersistentAssociationAttribute>(); persistentCollectionMemberInfo.TypeAttributes.Add(persistentAssociationAttribute); persistentAssociationAttribute.AssociationName = persistentReferenceMemberInfo.TypeAttributes.OfType<IPersistentAssociationAttribute>().Single().AssociationName; }
void CreateTemplateInfo(IPersistentReferenceMemberInfo persistentReferenceMemberInfo, Column column, ForeignKeyCalculator _foreignKeyCalculator) { var table = (Table)column.Parent; var database = table.Parent; var foreignKey = _foreignKeyCalculator.GetForeignKey(database, column.Name, table); var templateInfo = _objectSpace.CreateWCObject <ITemplateInfo>(); templateInfo.Name = persistentReferenceMemberInfo.CodeTemplateInfo.CodeTemplate.TemplateType.ToString(); templateInfo.TemplateCode = _foreignKeyCalculator.GetRefTableForeignKey(foreignKey, column.Name).Columns.OfType <ForeignKeyColumn>().Single(keyColumn => keyColumn.ReferencedColumn == column.Name).Name; persistentReferenceMemberInfo.TemplateInfos.Add(templateInfo); }
public void Reference_member(IWCTestData testData, IPersistentReferenceMemberInfo memberInfo, Compiler compiler) { var assemblyInfo = memberInfo.Owner.PersistentAssemblyInfo; var code = assemblyInfo.GenerateCode(); var compilerResult = compiler.Compile(code, assemblyInfo.Name); var propertyDefinitions = compilerResult.AssemblyDefinition.MainModule.Types.SelectMany(definition => definition.Properties); var propertyDefinition = propertyDefinitions.FirstOrDefault(definition => definition.Name == memberInfo.Name); propertyDefinition.Should().NotBeNull(); propertyDefinition?.PropertyType.Name.Should().Be(memberInfo.ReferenceClassInfo.Name); }
public void CreateCollection(IPersistentReferenceMemberInfo persistentReferenceMemberInfo, IPersistentClassInfo owner) { var persistentCollectionMemberInfo = _objectSpace.CreateWCObject <IPersistentCollectionMemberInfo>(); persistentReferenceMemberInfo.ReferenceClassInfo.OwnMembers.Add(persistentCollectionMemberInfo); persistentCollectionMemberInfo.Name = persistentReferenceMemberInfo.Owner.Name + persistentReferenceMemberInfo.Name + "s"; persistentCollectionMemberInfo.Owner = persistentReferenceMemberInfo.ReferenceClassInfo; persistentCollectionMemberInfo.CollectionClassInfo = owner; persistentCollectionMemberInfo.SetDefaultTemplate(TemplateType.XPCollectionMember); var persistentAssociationAttribute = _objectSpace.CreateWCObject <IPersistentAssociationAttribute>(); persistentCollectionMemberInfo.TypeAttributes.Add(persistentAssociationAttribute); persistentAssociationAttribute.AssociationName = persistentReferenceMemberInfo.TypeAttributes.OfType <IPersistentAssociationAttribute>().Single().AssociationName; }
public void Many_to_many_association(IWCTestData testData, IPersistentCollectionMemberInfo collectionMemberInfo, IPersistentReferenceMemberInfo referenceMemberInfo, Compiler compiler) { referenceMemberInfo.CreateAssociation("test"); collectionMemberInfo.CreateAssociation("test"); var persistentAssemblyInfo = referenceMemberInfo.Owner.PersistentAssemblyInfo; var code = persistentAssemblyInfo.GenerateCode(); var assemblyDefinition = compiler.Compile(code, persistentAssemblyInfo.Name).AssemblyDefinition; CheckAssociation(referenceMemberInfo, assemblyDefinition); CheckAssociation(collectionMemberInfo, assemblyDefinition); }
public void CreateReferenceMembers(Func <IPersistentClassInfo, IEnumerable <Type> > referenceClassInfoFunc, bool createAssociation) { foreach (IPersistentClassInfo info in _persistentClassInfos) { IEnumerable <Type> types = referenceClassInfoFunc.Invoke(info); if (types != null) { foreach (Type type in types) { IPersistentReferenceMemberInfo persistentReferenceMemberInfo = ((IClassInfoHandler)this).CreateRefenenceMember(info, type.Name, type, createAssociation); persistentReferenceMemberInfo.SetReferenceTypeFullName(type.FullName); } } } }
void CreateCollection(IPersistentReferenceMemberInfo persistentReferenceMemberInfo, IPersistentClassInfo owner) { var persistentCollectionMemberInfo = _objectSpace.CreateWCObject <IPersistentCollectionMemberInfo>(); persistentReferenceMemberInfo.ReferenceClassInfo.OwnMembers.Add(persistentCollectionMemberInfo); persistentCollectionMemberInfo.Name = persistentReferenceMemberInfo.Owner.Name + persistentReferenceMemberInfo.Name + "s"; persistentCollectionMemberInfo.Owner = persistentReferenceMemberInfo.ReferenceClassInfo; var tableName = ClassGenerator.GetTableName(Regex.Replace(owner.Name, ClassGenerator.KeyStruct, "", RegexOptions.Singleline | RegexOptions.IgnoreCase)); persistentCollectionMemberInfo.CollectionClassInfo = owner.CodeTemplateInfo.CodeTemplate.TemplateType == TemplateType.Struct ? _classInfos[tableName].PersistentClassInfo : owner; persistentCollectionMemberInfo.SetDefaultTemplate(TemplateType.XPCollectionMember); var persistentAssociationAttribute = _objectSpace.CreateWCObject <IPersistentAssociationAttribute>(); persistentCollectionMemberInfo.TypeAttributes.Add(persistentAssociationAttribute); persistentAssociationAttribute.AssociationName = String.Format("{0}-{1}s", persistentReferenceMemberInfo.Name, persistentCollectionMemberInfo.Name); }
public static string GetCode(IPersistentReferenceMemberInfo key) { var referenceMemberInfos = key.ReferenceClassInfo.OwnMembers.OfType <IPersistentReferenceMemberInfo>(); string ret = null; foreach (var referenceMemberInfo in referenceMemberInfos) { string refPropertyName = key.Name.CleanCodeName() + "." + referenceMemberInfo.Name.CleanCodeName(); var persistentMemberInfo = referenceMemberInfo.ReferenceClassInfo.OwnMembers.SingleOrDefault(info => info.TypeAttributes.OfType <IPersistentKeyAttribute>().Any()); if (persistentMemberInfo != null) { var refKeyName = persistentMemberInfo.Name.CleanCodeName(); ret += @"if(" + refPropertyName + ".Session != Session){" + refPropertyName + "=Session.GetObjectByKey<" + referenceMemberInfo.ReferenceClassInfo.Name.CleanCodeName() + ">(" + refPropertyName + "." + refKeyName + ");" + "}"; } } return(ret); }
static string GetCode(IPersistentReferenceMemberInfo key) { var referenceMemberInfos = key.ReferenceClassInfo.OwnMembers.OfType<IPersistentReferenceMemberInfo>(); string ret = null; foreach (var referenceMemberInfo in referenceMemberInfos) { string refPropertyName = CleanName(key.Name) + "." + CleanName(referenceMemberInfo.Name); var persistentMemberInfo = referenceMemberInfo.ReferenceClassInfo.OwnMembers.Where(info => info.TypeAttributes.OfType<IPersistentKeyAttribute>().Count() > 0).SingleOrDefault(); if (persistentMemberInfo != null) { var refKeyName = CleanName(persistentMemberInfo.Name); ret += @"if(" + refPropertyName + ".Session != Session){" + refPropertyName + "=Session.GetObjectByKey<" + CleanName(referenceMemberInfo.ReferenceClassInfo.Name) + ">(" + refPropertyName + "." + refKeyName + ");" + "}"; } } return ret; }
void CreateCollection(IPersistentReferenceMemberInfo persistentReferenceMemberInfo, IPersistentClassInfo owner) { var persistentCollectionMemberInfo = _objectSpace.CreateWCObject<IPersistentCollectionMemberInfo>(); persistentReferenceMemberInfo.ReferenceClassInfo.OwnMembers.Add(persistentCollectionMemberInfo); persistentCollectionMemberInfo.Name = persistentReferenceMemberInfo.Owner.Name + persistentReferenceMemberInfo.Name + "s"; persistentCollectionMemberInfo.Owner = persistentReferenceMemberInfo.ReferenceClassInfo; var tableName = ClassGenerator.GetTableName(Regex.Replace(owner.Name, ClassGenerator.KeyStruct, "", RegexOptions.Singleline | RegexOptions.IgnoreCase)); persistentCollectionMemberInfo.CollectionClassInfo = owner.CodeTemplateInfo.CodeTemplate.TemplateType == TemplateType.Struct ? _classInfos[tableName].PersistentClassInfo : owner; persistentCollectionMemberInfo.SetDefaultTemplate(TemplateType.XPCollectionMember); var persistentAssociationAttribute = _objectSpace.CreateWCObject<IPersistentAssociationAttribute>(); persistentCollectionMemberInfo.TypeAttributes.Add(persistentAssociationAttribute); persistentAssociationAttribute.AssociationName = String.Format("{0}-{1}s", persistentReferenceMemberInfo.Name, persistentCollectionMemberInfo.Name); }
public void OneToMany_association(IWCTestData testData, IPersistentReferenceMemberInfo memberInfo, Compiler compiler) { CreateAndCheckAssociation(memberInfo, compiler); }
public void Automatically_the_Many_part_of_the_association_from_the_one(IWCTestData testData, IPersistentReferenceMemberInfo memberInfo, Compiler compiler) { throw new NotImplementedException(); // var assemblyDefinition = CreateAndCheckAssociation(memberInfo, compiler,true); // // var persistentAssociatedMemberInfo = memberInfo.GetAssociation(); // persistentAssociatedMemberInfo.Should().BeOfType<IPersistentCollectionMemberInfo>(); // CheckAssociation(persistentAssociatedMemberInfo,assemblyDefinition); }