示例#1
0
        IEnumerable <object> GetSamples(string language, string connectionString, MappingSource mappingSource, TextWriter log)
        {
            string projectDir  = Path.Combine(this.solutionPath, "samples." + language);
            string projectFile = Directory.GetFiles(projectDir, String.Format("*.{0}proj", language)).FirstOrDefault();

            if (projectFile == null)
            {
                throw new InvalidOperationException("Project file not found.");
            }

            string   projectFileName  = projectFile.Split(Path.DirectorySeparatorChar).Last();
            string   assemblyFileName = String.Join(".", projectFileName.Split('.').Reverse().Skip(1).Reverse()) + ".dll";
            string   assemblyPath     = Path.Combine(projectDir, "bin", "Debug", assemblyFileName);
            Assembly samplesAssembly  = Assembly.Load(File.ReadAllBytes(assemblyPath));

            MetaModel mapping;

            if (mappingSource is AttributeMappingSource)
            {
                mapping = mappingSource.GetModel(
                    samplesAssembly.GetTypes()
                    .Where(t => typeof(Database).IsAssignableFrom(t))
                    .Single()
                    );
            }
            else
            {
                mapping = mappingSource.GetModel(
                    samplesAssembly.GetTypes()
                    .Where(t => typeof(System.Data.Linq.DataContext).IsAssignableFrom(t))
                    .Single()
                    );
            }

            return
                (from t in samplesAssembly.GetTypes()
                 where t.IsPublic &&
                 t.Name.EndsWith("Samples")
                 let parameters = t.GetConstructors().First().GetParameters()
                                  let args =
                     from p in parameters
                     select(p.ParameterType == typeof(string)?connectionString
                            : p.ParameterType == typeof(TextWriter)?log
                            : p.ParameterType == typeof(MetaModel)?mapping
                            : p.ParameterType == typeof(DbConnection)?Database.CreateConnection(connectionString)
                            : p.ParameterType.IsValueType?Activator.CreateInstance(p.ParameterType)
                            : null)
                     select Activator.CreateInstance(t, args.ToArray()));
        }
示例#2
0
        private void Init(object connection, MappingSource mapping)
        {
            _perInstanceProviderMode = DataContext.ProviderMode;
            MetaModel model = mapping.GetModel(this.GetType());

            this._services  = new CommonDataServices(this, model);
            this._conflicts = new ChangeConflictCollection();

            // determine provider
            Type providerType;

            if (model.ProviderType != null)
            {
                providerType = model.ProviderType;
            }
            else
            {
                throw Error.ProviderTypeNull();
            }

            if (!typeof(IProvider).IsAssignableFrom(providerType))
            {
                throw Error.ProviderDoesNotImplementRequiredInterface(providerType, typeof(IProvider));
            }

            this._provider = (IProvider)Activator.CreateInstance(providerType);
            SetProviderMode();
            this._provider.Initialize(this._services, connection);

            this._tables = new Dictionary <MetaTable, ITable>();
            this.InitTables(this);
        }
示例#3
0
        private void Init(object connection, MappingSource mapping)
        {
            var model = mapping.GetModel(GetType());

            services  = new CommonDataServices(this, model);
            conflicts = new ChangeConflictCollection();

            // determine provider
            if (model.ProviderType == null)
            {
                throw Error.ProviderTypeNull();
            }
            var providerType = model.ProviderType;

            if (!typeof(IProvider).IsAssignableFrom(providerType))
            {
                throw Error.ProviderDoesNotImplementRequiredInterface(providerType, typeof(IProvider));
            }

            provider = (IProvider)Activator.CreateInstance(providerType);
            provider.Initialize(services, connection);

            tables = new Dictionary <MetaTable, ITable>();
            InitTables(this);
        }
示例#4
0
        private void Init(object connection, MappingSource mapping)
        {
            //if (mapping is DynamicMappingSource == false)
            //    mapping = new DynamicMappingSource(mapping);

            MetaModel model = mapping.GetModel(GetType());

            if (providerType == null)
            {
                providerType = model.ProviderType;
            }

            if (providerType == null)
            {
                throw Error.ProviderTypeNull();
            }


            //try
            //{
            //    LicenseManager.Validate(providerType, this);
            //}
            //catch (Exception exc)
            //{
            //    throw exc;
            //}


            services         = new CommonDataServices(this, model);
            conflicts        = new ChangeConflictCollection();
            extendTableTypes = new ExtendTableTypes();



            if (!typeof(IProvider).IsAssignableFrom(providerType))
            {
                throw Error.ProviderDoesNotImplementRequiredInterface(providerType, typeof(IProvider));
            }


            var p = (SqlProvider)Activator.CreateInstance(providerType);

            Provider = p;

            Provider.Initialize(services, connection);
            tables = new Dictionary <MetaTable, ITable>();
        }