/// <summary>
        /// Creates a Custom Model assembly with given name and extended type definitions and saves it to assemblyName.dll
        /// </summary>
        /// <param name="assemblyName">The name of the assembly (will be saved as assemblyName.dll)</param>
        /// <param name="extendedTables">The enumeration of extended tables to be implemented</param>
        public static void CreateCustomModelAssembly(string assemblyName, IEnumerable <ExtendedTable> extendedTables)
        {
            string assemblyFileName = assemblyName + ".dll";
            var    assemblyBuilder  = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(assemblyName), AssemblyBuilderAccess.RunAndSave);
            var    moduleBuilder    = assemblyBuilder.DefineDynamicModule(assemblyFileName, assemblyFileName);

            var derivedTypes = new List <Type>();

            var tableMappings = new TableMappings();

            foreach (var extendedTable in extendedTables)
            {
                var tableMapping = new TableMapping(extendedTable.TableName);
                foreach (var extendedType in extendedTable.Types)
                {
                    var derivedType = CreateDerivedType(moduleBuilder, extendedTable, extendedType);

                    derivedTypes.Add(derivedType);

                    tableMapping.Add(new TypeMapping(extendedType.BaseType, derivedType));
                }
                tableMappings.Add(tableMapping);
            }
            SerializeMappings(assemblyName, tableMappings);
            assemblyBuilder.Save(assemblyFileName);
        }