Example #1
0
        /// <summary>
        /// Extract schema information from assemblies.
        /// </summary>
        /// <param name="pClassesFilenames">Assemblies containing
        /// desired persistable types.</param>
        /// <param name="pDependenciesFilenames">Assemblies required by
        /// pClassesFilenames Assemblies.</param>
        /// <returns></returns>
        public static SchemaInfo Extract(string[] pClassesFilenames, string[] pDependenciesFilenames, SessionInfo sessionInfo)
        {
            // Create schema, get persistable types, loaded assemblies and
            // loaded assemblies names, and finally create names for each type.
            SchemaInfo lSchema = new SchemaInfo()
            {
                UserClassesFiles      = pClassesFilenames,
                UserDependenciesFiles = pDependenciesFilenames
            };

            // Already loaded assemblies sometimes get not found! register
            // resolver.
            AppDomain.CurrentDomain.AssemblyResolve += SchemaExtractor.AssemblyResolve;
            GetAssembliesAndTypes(pClassesFilenames, pDependenciesFilenames, ref lSchema);
            sessionInfo.SetSession();
            var schema = sessionInfo.Session.OpenSchema(false);

            lSchema.PersistableTypes = schema.LookupByType.Where(p => schema.IsInternalType(p.Value) == false).Select(p => p.Key).ToArray();
            CreateNamesDictionary(lSchema.PersistableTypes, ref lSchema);
            AppDomain.CurrentDomain.AssemblyResolve -= SchemaExtractor.AssemblyResolve;
            return(lSchema);
        }