Ejemplo n.º 1
0
        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'");
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
 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);
             }
         }
     }
 }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
 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;
 }
Ejemplo n.º 12
0
 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);
 }
Ejemplo n.º 13
0
 public void OneToMany_association(IWCTestData testData, IPersistentReferenceMemberInfo memberInfo, Compiler compiler)
 {
     CreateAndCheckAssociation(memberInfo, compiler);
 }
Ejemplo n.º 14
0
        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);
        }