示例#1
0
    public static void Main()
    {
        string[] cultureNames = { "en-US", "hu-HU", "pt-PT" };
        object[] objects      = { 12,                            17.2, false, new DateTime(2010, 1, 1), "today",
                                  new System.Collections.ArrayList(), 'c',
                                  "05/10/2009 6:13:18 PM",            "September 8, 1899" };

        foreach (string cultureName in cultureNames)
        {
            Console.WriteLine("{0} culture:", cultureName);
            CustomProvider provider = new CustomProvider(cultureName);
            foreach (object obj in objects)
            {
                try {
                    DateTime dateValue = Convert.ToDateTime(obj, provider);
                    Console.WriteLine("{0} --> {1}", obj,
                                      dateValue.ToString(new CultureInfo(cultureName)));
                }
                catch (FormatException) {
                    Console.WriteLine("{0} --> Bad Format", obj);
                }
                catch (InvalidCastException) {
                    Console.WriteLine("{0} --> Conversion Not Supported", obj);
                }
            }
            Console.WriteLine();
        }
    }
示例#2
0
 internal Context(Context context)
 {
     this.mappings   = context.mappings;
     this.connection = context.connection;
     this.provider   = context.provider;
     GC.SuppressFinalize(this);             // No timer to cleanup
 }
示例#3
0
        internal Commands(EntityMap entity, CustomProvider provider)
        {
            this.QS       = provider.StartDelimiter;
            this.QE       = provider.EndDelimiter;
            this.DD       = provider.DateDelimiter;
            this.GD       = provider.GuidDelimiter;
            this.TS       = provider.LineTerminator;
            this.entity   = entity;
            this.provider = provider;

            this.selectFields = this.CreateFields();
            this.select       = this.CreateSelect();
#if DEBUG_MAPPER
            Debug.WriteLine("  " + this.select);
#endif
            if (!this.entity.ReadOnly)
            {
                this.insert = this.CreateInsert();
                this.update = this.CreateUpdate();
                this.delete = this.CreateDelete();
#if DEBUG_MAPPER
                Debug.WriteLine("  " + this.insert);
                Debug.WriteLine("  " + this.update);
                Debug.WriteLine("  " + this.delete);
#endif
            }
        }
        public static IDbConnection GetConnection(string connection, CustomProvider customProvider)
        {
            if (!customProvider.IsCustom)
            {
                // These were split out into mini-methods to support medium trust
                switch (customProvider.Provider)
                {
                case Provider.MsSql: return(GetMsSqlConnection(connection));

                case Provider.Sql2005: return(GetMsSqlConnection(connection));

                case Provider.Access: return(GetOleDbConnection(connection));

                case Provider.Oracle: return(GetOracleConnection(connection));

                case Provider.OleDb: return(GetOleDbConnection(connection));

                case Provider.Odbc: return(GetOdbcConnection(connection));

                default:
                    throw new ORMapperException("Internals: Data Provider was Invalid");
                }
            }
            else
            {
                IDbConnection connect = (IDbConnection)Activator.CreateInstance(customProvider.Connection);
                connect.ConnectionString = connection;
                return(connect);
            }
        }
        public static IDbDataAdapter GetAdapter(IDbCommand command, CustomProvider customProvider)
        {
            if (!customProvider.IsCustom)
            {
                // These were split out into mini-methods to support medium trust
                switch (customProvider.Provider)
                {
                case Provider.MsSql: return(GetMsSqlAdapter(command));

                case Provider.Sql2005: return(GetMsSqlAdapter(command));

                case Provider.Access: return(GetOleDbAdapter(command));

                case Provider.Oracle: return(GetOracleAdapter(command));

                case Provider.OleDb: return(GetOleDbAdapter(command));

                case Provider.Odbc: return(GetOdbcAdapter(command));

                default:
                    throw new ORMapperException("Internals: Data Provider was Invalid");
                }
            }
            else
            {
                IDbDataAdapter adapter = (IDbDataAdapter)Activator.CreateInstance(customProvider.DataAdapter);
                adapter.SelectCommand = command;
                return(adapter);
            }
        }
示例#6
0
		internal Connection(string connectString, CustomProvider customProvider) {
			if (connectString == null || connectString.Length == 0) {
				throw new ORMapperException("Internals: ConnectionString was Empty");
			}
			if (customProvider.Provider == Provider.Access && connectString.ToUpper().IndexOf("PROVIDER") < 0) {
				this.connection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + connectString;
			}
			else {
				this.connection = connectString;
			}
			this.provider = customProvider;

			// Check Timeout Support and Valid Connection String
			IDbConnection connection = null;
			try {
				connection = ProviderFactory.GetConnection(this.connection, this.provider);
				this.commandTimeout = connection.ConnectionTimeout;
				try {
					IDbCommand command = connection.CreateCommand();
					command.CommandTimeout = this.commandTimeout;
				}
				catch {
					this.supportsTimeout = false;
				}
				connection.Open();
			}
			catch (Exception exception) {
				throw new ORMapperException("ObjectSpace: Connection String is Invalid - " + exception.Message, exception);
			}
			finally {
				if (connection != null) { connection.Close(); }
			}
		}
示例#7
0
		internal FieldMap(string member, string field, string nullValue, string parameter, PersistType persistType, Type memberType, CustomProvider provider)
			: base(member, field)
		{
			if (memberType == null) {
				throw new MappingException("Mapping: Field memberType was Missing - " + member);
			}
			this.persistType = persistType;
			this.memberType = memberType;

			if (nullValue == null) {
				this.nullValue = null;
			}
			else {
				// Jeff Lanning ([email protected]): Update to support null value expressions and make error message less ambiguous.
				try {
					this.nullValue = ConvertNullValue(nullValue, memberType);
				}
				catch (Exception ex) {
					throw new MappingException("Mapping: Failed to convert nullValue '" + nullValue + "' to type " + memberType.FullName + " for member '" + member + "'.", ex);
				}
			}
			if (parameter == null || parameter.Length == 0) {
				if (persistType != PersistType.Concurrent) {
					this.parameter = provider.GetParameterDefault(field);
				}
				else { // Concurrent Parameter Name Fix by Stephan Wagner (http://www.calac.net)
					this.parameter = provider.GetParameterDefault(member);
				}
			}
			else {
				this.parameter = parameter;
			}
		}
示例#8
0
        public void CompleteInitialization_NonExistingProviderNameOnCustomProvider_ThrowsException()
        {
            // Arrange
            string providerName            = "Valid provider name";
            string nonExistingProviderName = "Non existing provider name";
            var    providerUnderTest       = new CustomProvider();
            var    validConfiguration      = new NameValueCollection();

            validConfiguration["provider1"] = nonExistingProviderName;
            providerUnderTest.Initialize(providerName, validConfiguration);

            // List of configured providers in order
            var configuredProviders = new LoggingProviderCollection()
            {
                providerUnderTest
            };

            try
            {
                // Act
                providerUnderTest.CompleteInitialization(configuredProviders, providerUnderTest);

                // Assert
                Assert.Fail("Exception expected.");
            }
            catch (ProviderException ex)
            {
                Assert.IsTrue(ex.Message.Contains(typeof(CustomProvider).FullName),
                              "Exception message should state the provider's full name, because the type is not a " +
                              "type defined by the library itself. Actual: " + ex.Message);
            }
        }
示例#9
0
		internal RelationMap(Relationship relationship, string member, string field, string type, string alias, bool queryOnly,
			bool lazy, bool cascade, string filter, string sortOrder, string selectSP, CustomProvider provider) : base(member, field)
		{
			if (type == null || type.Length == 0) {
				throw new MappingException("Mapping: Relation type was Missing");
			}
			if (alias == null || alias.Length == 0) { // Should never happend since alias defaults to member
				throw new MappingException("Mapping: Relation alias was Missing");
			}

			this.fields = field.Replace(", ", ",").Split(',');
			this.relationship = relationship;
			this.type = type;
			this.alias = alias;
			this.queryOnly = queryOnly;
			this.lazy = lazy;
			this.cascade = cascade;
			this.filter = filter;
			this.sortOrder = sortOrder;
			this.selectSP = selectSP;
			if (selectSP != null && selectSP.Length > 0) {
				for (int index = 0; index < this.fields.Length; index++) {
					this.fields[index] = provider.GetParameterDefault(this.fields[index]);
				}
			}
		}
示例#10
0
        public void Compile(ObjectExpression oe)
        {
            _maps     = oe.Mappings;
            _provider = oe.Mappings.provider;

            _nextAliasIndex = 0;
            _parameterTable = new OPathParameterTable();

            // generate the database-specific query statement (and the parameter table at the same time)
            using (StringWriter writer = new StringWriter(new StringBuilder(500)))
            {
                WriteSqlQuery(writer, oe.Expression);
                writer.Write(_provider.LineTerminator);
                _sqlQuery = writer.ToString();
            }

            SetParameterOrder(oe);

            // all or none of the parameters have to be provided
            if (_parameterTable != null)
            {
                if (_parameterTable.Count != oe.ParameterCount)
                {
                    throw new Exception("Number of parameters in the expression does not match number of parameters in the OPathQuery.");
                }
            }

#if DEBUG
            //Debug.WriteLine(_sqlQuery);
            //Debug.WriteLine("");
#endif
        }
示例#11
0
		internal ManyMap(string member, string field, string type, string alias, string table, string source, string dest,
			bool queryOnly, bool lazy, bool cascade, string filter, string sortOrder, string selectSP, string insertSP, string deleteSP, CustomProvider provider)
			: base(Relationship.Many, member, field, type, alias, queryOnly, lazy, cascade, filter, sortOrder, selectSP, provider)
		{
			if (table == null || table.Length == 0) {
				throw new MappingException("Mapping: Relation table was Missing - " + member);
			}
			if (source == null || source.Length == 0) {
				throw new MappingException("Mapping: Relation sourceField was Missing - " + member);
			}
			if (dest == null || dest.Length == 0) {
				throw new MappingException("Mapping: Relation destField was Missing - " + member);
			}
			this.table = table;
			this.source = source.Replace(", ", ",").Split(',');
			this.dest = dest.Replace(", ", ",").Split(',');
			this.insertSP = insertSP;
			this.deleteSP = deleteSP;
			if (insertSP != null && insertSP.Length > 0 && deleteSP != null && deleteSP.Length > 0) {
				for (int index = 0; index < System.Math.Min(this.source.Length, this.dest.Length); index++) {
					this.source[index] = provider.GetParameterDefault(this.source[index]);
					this.dest[index] = provider.GetParameterDefault(this.dest[index]);
				}
			}
		}
示例#12
0
        private string TS = ";"; // Terminate-Statement Delimiter for SQL Batch

        #endregion Fields

        #region Constructors

        internal Commands(EntityMap entity, CustomProvider provider)
        {
            this.QS = provider.StartDelimiter;
            this.QE = provider.EndDelimiter;
            this.DD = provider.DateDelimiter;
            this.GD = provider.GuidDelimiter;
            this.TS = provider.LineTerminator;
            this.entity = entity;
            this.provider = provider;

            this.selectFields = this.CreateFields();
            this.select = this.CreateSelect();
            #if DEBUG_MAPPER
            Debug.WriteLine("  " + this.select);
            #endif
            if (!this.entity.ReadOnly) {
                this.insert = this.CreateInsert();
                this.update = this.CreateUpdate();
                this.delete = this.CreateDelete();
            #if DEBUG_MAPPER
                Debug.WriteLine("  " + this.insert);
                Debug.WriteLine("  " + this.update);
                Debug.WriteLine("  " + this.delete);
            #endif
            }
        }
示例#13
0
		public void Compile(ObjectExpression oe)
		{
			_maps = oe.Mappings;
			_provider = oe.Mappings.provider;

			_nextAliasIndex = 0;
			_parameterTable = new OPathParameterTable();

			// generate the database-specific query statement (and the parameter table at the same time)
			using( StringWriter writer = new StringWriter(new StringBuilder(500)) )
			{
				WriteSqlQuery(writer, oe.Expression);
				writer.Write(_provider.LineTerminator);
				_sqlQuery = writer.ToString();
			}

			SetParameterOrder(oe);

			// all or none of the parameters have to be provided
			if( _parameterTable != null )
			{
				if( _parameterTable.Count != oe.ParameterCount )
				{
					throw new Exception("Number of parameters in the expression does not match number of parameters in the OPathQuery.");
				}
			}

#if DEBUG
			//Debug.WriteLine(_sqlQuery);
			//Debug.WriteLine("");
#endif
		}
示例#14
0
        public void CreateGenerator_ReturnsOverridenGenerator()
        {
#pragma warning disable 0618
            CustomProvider provider = new CustomProvider();
            Assert.Same(provider.CreateGenerator(), provider.CreateGenerator("fileName"));
            Assert.Same(provider.CreateGenerator(), provider.CreateGenerator(new StringWriter()));
#pragma warning restore 0618
        }
示例#15
0
        public void CreateGenerator_ReturnsOverridenGenerator()
        {
#pragma warning disable 0618
            CustomProvider provider = new CustomProvider();
            Assert.Same(provider.CreateGenerator(), provider.CreateGenerator("fileName"));
            Assert.Same(provider.CreateGenerator(), provider.CreateGenerator(new StringWriter()));
#pragma warning restore 0618
        }
示例#16
0
        // Embedded Resource Mappings from Allan Ritchie ([email protected])
        internal Mappings(XmlDocument xmlMappings, CustomProvider customProvider)
        {
            this.provider = customProvider;

#if DEBUG_MAPPER
            Debug.WriteLine("========== Mappings Start Here ===========");
#endif

            this.ParseMappings(xmlMappings, null, null, null);

#if DEBUG_MAPPER
            Debug.WriteLine("========== Mappings End Here ===========");
#endif
        }
示例#17
0
        // Embedded Resource Mappings from Allan Ritchie ([email protected])
        internal Mappings(XmlDocument xmlMappings, CustomProvider customProvider)
        {
            this.provider = customProvider;

            #if DEBUG_MAPPER
            Debug.WriteLine("========== Mappings Start Here ===========");
            #endif

            this.ParseMappings(xmlMappings, null);

            #if DEBUG_MAPPER
            Debug.WriteLine("========== Mappings End Here ===========");
            #endif
        }
示例#18
0
 public static Commands GetCommands(EntityMap entity, CustomProvider customProvider)
 {
     if (!customProvider.IsCustom) {
         switch (customProvider.Provider) {
             case Provider.MsSql : return new MSCommands(entity, customProvider);
             case Provider.Sql2005 : return new Sql2005Commands(entity, customProvider);
             case Provider.Access : return new MSCommands(entity, customProvider);
             case Provider.Oracle : return new OracleCommands(entity, customProvider);
             default : return new Commands(entity, customProvider);
         }
     }
     else {
         return new Commands(entity, customProvider);
     }
 }
示例#19
0
 private void Init(XmlDocument xmlMappings, string connectString, CustomProvider customProvider,
                   int sessionMinutes, int cleanupMinutes)
 {
     if (connectString == null || connectString.Length == 0)
     {
         throw new ORMapperException("ObjectSpace: ConnectionString was Empty");
     }
     this.mappings       = new Mappings(xmlMappings, customProvider);
     this.connection     = new Connection(connectString, customProvider);
     this.provider       = customProvider;
     this.session        = new TimeSpan(0, (sessionMinutes < 0 ? 0 : sessionMinutes), 0);
     this.timer          = new Timer((cleanupMinutes < 1 ? 1 : cleanupMinutes) * 60000);
     this.timer.Elapsed += new ElapsedEventHandler(this.CleanupInstances);
     this.timer.Start();
 }
示例#20
0
		internal LookupMap(string member, string field, string nullValue, string parameter, string table, string source, string dest, Type memberType, CustomProvider provider)
			: base(member, field, nullValue, parameter, PersistType.ReadOnly, memberType, provider)
		{
			if (table == null || table.Length == 0) {
				throw new MappingException("Mapping: Lookup table was Missing - " + member);
			}
			if (source == null || source.Length == 0) {
				throw new MappingException("Mapping: Lookup foreignKey was Missing - " + member);
			}
			if (dest == null || dest.Length == 0) {
				throw new MappingException("Mapping: Lookup lookupKey was Missing - " + member);
			}
			this.table = table;
			this.source = source.Replace(", ", ",").Split(',');
			this.dest = dest.Replace(", ", ",").Split(',');
		}
示例#21
0
        internal Context(Stream mappingStream, string connectString, CustomProvider customProvider,
                         int sessionMinutes, int cleanupMinutes)
        {
#if DEMO
            this.license = LicenseManager.Validate(this.GetType(), this);
#endif
            Mappings.LoadAssemblies();
            XmlDocument mappings = new XmlDocument();
            try {
                mappings.Load(mappingStream);
            }
            finally {
                if (mappingStream != null)
                {
                    mappingStream.Close();
                }
            }
            this.Init(mappings, connectString, customProvider, sessionMinutes, cleanupMinutes);
        }
示例#22
0
		public static IDbConnection GetConnection(string connection, CustomProvider customProvider) {
			if (!customProvider.IsCustom) {
				// These were split out into mini-methods to support medium trust
				switch (customProvider.Provider) {
					case Provider.MsSql: return GetMsSqlConnection(connection);
					case Provider.Sql2005: return GetMsSqlConnection(connection);
					case Provider.Access: return GetOleDbConnection(connection);
					case Provider.Oracle: return GetOracleConnection(connection);
					case Provider.OleDb: return GetOleDbConnection(connection);
					case Provider.Odbc: return GetOdbcConnection(connection);
					default:
						throw new ORMapperException("Internals: Data Provider was Invalid");
				}
			}
			else {
				IDbConnection connect = (IDbConnection) Activator.CreateInstance(customProvider.Connection);
				connect.ConnectionString = connection;
				return connect;
			}
		}
示例#23
0
		public static IDbDataAdapter GetAdapter(IDbCommand command, CustomProvider customProvider) {
			if (!customProvider.IsCustom) {
				// These were split out into mini-methods to support medium trust
				switch (customProvider.Provider) {
					case Provider.MsSql: return GetMsSqlAdapter(command);
					case Provider.Sql2005: return GetMsSqlAdapter(command);
					case Provider.Access: return GetOleDbAdapter(command);
					case Provider.Oracle: return GetOracleAdapter(command);
					case Provider.OleDb: return GetOleDbAdapter(command);
					case Provider.Odbc: return GetOdbcAdapter(command);
					default:
						throw new ORMapperException("Internals: Data Provider was Invalid");
				}
			}
			else {
				IDbDataAdapter adapter = (IDbDataAdapter) Activator.CreateInstance(customProvider.DataAdapter);
				adapter.SelectCommand = command;
				return adapter;
			}
		}
示例#24
0
        internal Connection(string connectString, CustomProvider customProvider)
        {
            if (connectString == null || connectString.Length == 0)
            {
                throw new ORMapperException("Internals: ConnectionString was Empty");
            }
            if (customProvider.Provider == Provider.Access && connectString.ToUpper().IndexOf("PROVIDER") < 0)
            {
                this.connection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + connectString;
            }
            else
            {
                this.connection = connectString;
            }
            this.provider = customProvider;

            // Check Timeout Support and Valid Connection String
            IDbConnection connection = null;

            try {
                connection          = ProviderFactory.GetConnection(this.connection, this.provider);
                this.commandTimeout = connection.ConnectionTimeout;
                try {
                    IDbCommand command = connection.CreateCommand();
                    command.CommandTimeout = this.commandTimeout;
                }
                catch {
                    this.supportsTimeout = false;
                }
                connection.Open();
            }
            catch (Exception exception) {
                throw new ORMapperException("ObjectSpace: Connection String is Invalid - " + exception.Message, exception);
            }
            finally {
                if (connection != null)
                {
                    connection.Close();
                }
            }
        }
        private static string GetConnectionStringByName([NotNull] string connectionStringName)
        {
            if (string.IsNullOrWhiteSpace(connectionStringName))
            {
                throw new ArgumentNullException(nameof(connectionStringName));
            }

            var result = CustomProvider?.Invoke(connectionStringName);

            if (!string.IsNullOrWhiteSpace(result))
            {
                return(result);
            }

            var css = ConfigurationManager.ConnectionStrings[connectionStringName];

            if (css != null && !string.IsNullOrWhiteSpace(css.ConnectionString))
            {
                return(css.ConnectionString);
            }

#if NETSTANDARD
            var configuration = GlobalConfigurationProvider.Get();
            if (configuration != null)
            {
                var cs = configuration.GetSection("ConnectionStrings")?[connectionStringName];
                if (!string.IsNullOrWhiteSpace(cs))
                {
                    return(cs);
                }

                cs = configuration[$"connectionStrings:add:{connectionStringName}:connectionString"];
                if (!string.IsNullOrWhiteSpace(cs))
                {
                    return(cs);
                }
            }
#endif

            throw new InvalidOperationException("Unable to find connection string " + connectionStringName + " in app configuration.");
        }
示例#26
0
        // Includes Null-Value Assistance from Tim Byng (http://www.missioninc.com)
        internal void AddField(string member, string field, string nullValue, string alias,
                               string parameter, PersistType persistType, CustomProvider provider)
        {
            this.AddMember(member);
            FieldMap[] tempFields = new FieldMap[this.fields.Length + 1];
            this.fields.CopyTo(tempFields, 0);
            tempFields[this.fields.Length] = new FieldMap(member, field, nullValue,
                                                          parameter, persistType, EntityMap.GetType(this.Member(member)), provider);
            int keyIndex = -1;

            for (int index = 0; index < this.keyMembers.Length; index++)
            {
                if (this.keyMembers[index].Equals(member))
                {
                    keyIndex = index;
                }
            }
            if (keyIndex > -1)
            {
                FieldMap[] tempKeyFields = new FieldMap[this.keyFields.Length + 1];
                this.keyFields.CopyTo(tempKeyFields, 0);
                tempKeyFields[this.keyFields.Length] = tempFields[this.fields.Length];
                this.keyFields = tempKeyFields;
            }
            if (persistType == PersistType.ReadOnly)
            {
                this.readOnlyCount++;
            }
            if (persistType == PersistType.Concurrent)
            {
                this.concurrentCount++;
            }
            this.fields = tempFields;
            this.helper.Add(alias, this.fields.Length - 1);

            if (this.baseEntity != null && !this.baseEntity.subFields.ContainsKey(field))
            {
                this.baseEntity.subFields.Add(field, this.fields[this.fields.Length - 1]);
            }
        }
示例#27
0
        public static Commands GetCommands(EntityMap entity, CustomProvider customProvider)
        {
            if (!customProvider.IsCustom)
            {
                switch (customProvider.Provider)
                {
                case Provider.MsSql: return(new MSCommands(entity, customProvider));

                case Provider.Sql2005: return(new Sql2005Commands(entity, customProvider));

                case Provider.Access: return(new MSCommands(entity, customProvider));

                case Provider.Oracle: return(new OracleCommands(entity, customProvider));

                default: return(new Commands(entity, customProvider));
                }
            }
            else
            {
                return(new Commands(entity, customProvider));
            }
        }
示例#28
0
        internal Context(string mappingFile, string connectString, CustomProvider customProvider,
                         int sessionMinutes, int cleanupMinutes)
        {
#if DEMO
            this.license = LicenseManager.Validate(this.GetType(), this);
#endif
            Mappings.LoadAssemblies();
            XmlDocument mappings = new XmlDocument();
            if (mappingFile.IndexOf("/") > -1 || mappingFile.IndexOf("\\") > -1 || mappingFile.Split('.').Length <= 2)
            {
                // Try to Automatically Resolve Path of Mapping File
                string fullPath = Mappings.GetFullPath(mappingFile);
                mappings.Load(fullPath);
            }
            else
            {
                // Try to Automatically Load Embedded Mapping File
                using (Stream stream = Mappings.GetResourceStream(mappingFile)) {
                    mappings.Load(stream);
                }
            }
            this.Init(mappings, connectString, customProvider, sessionMinutes, cleanupMinutes);
        }
示例#29
0
        internal RelationMap(Relationship relationship, string member, string field, string type, string alias, bool queryOnly,
                             bool lazy, bool cascade, string filter, string sortOrder, string selectSP, CustomProvider provider) : base(member, field)
        {
            if (type == null || type.Length == 0)
            {
                throw new MappingException("Mapping: Relation type was Missing");
            }
            if (alias == null || alias.Length == 0)               // Should never happend since alias defaults to member
            {
                throw new MappingException("Mapping: Relation alias was Missing");
            }

            this.fields       = field.Replace(", ", ",").Split(',');
            this.relationship = relationship;
            this.type         = type;
            this.alias        = alias;
            this.queryOnly    = queryOnly;
            this.lazy         = lazy;
            this.cascade      = cascade;
            this.filter       = filter;
            this.sortOrder    = sortOrder;
            this.selectSP     = selectSP;
            if (selectSP != null && selectSP.Length > 0)
            {
                for (int index = 0; index < this.fields.Length; index++)
                {
                    this.fields[index] = provider.GetParameterDefault(this.fields[index]);
                }
            }
        }
示例#30
0
 internal ManyMap(string member, string field, string type, string alias, string table, string source, string dest,
                  bool queryOnly, bool lazy, bool cascade, string filter, string sortOrder, string selectSP, string insertSP, string deleteSP, CustomProvider provider)
     : base(Relationship.Many, member, field, type, alias, queryOnly, lazy, cascade, filter, sortOrder, selectSP, provider)
 {
     if (table == null || table.Length == 0)
     {
         throw new MappingException("Mapping: Relation table was Missing - " + member);
     }
     if (source == null || source.Length == 0)
     {
         throw new MappingException("Mapping: Relation sourceField was Missing - " + member);
     }
     if (dest == null || dest.Length == 0)
     {
         throw new MappingException("Mapping: Relation destField was Missing - " + member);
     }
     this.table    = table;
     this.source   = source.Replace(", ", ",").Split(',');
     this.dest     = dest.Replace(", ", ",").Split(',');
     this.insertSP = insertSP;
     this.deleteSP = deleteSP;
     if (insertSP != null && insertSP.Length > 0 && deleteSP != null && deleteSP.Length > 0)
     {
         for (int index = 0; index < System.Math.Min(this.source.Length, this.dest.Length); index++)
         {
             this.source[index] = provider.GetParameterDefault(this.source[index]);
             this.dest[index]   = provider.GetParameterDefault(this.dest[index]);
         }
     }
 }
示例#31
0
 internal OracleCommands(EntityMap entity, CustomProvider provider) : base(entity, provider)
 {
 }
示例#32
0
        internal FieldMap(string member, string field, string nullValue, string parameter, PersistType persistType, Type memberType, CustomProvider provider)
            : base(member, field)
        {
            if (memberType == null)
            {
                throw new MappingException("Mapping: Field memberType was Missing - " + member);
            }
            this.persistType = persistType;
            this.memberType  = memberType;

            if (nullValue == null)
            {
                this.nullValue = null;
            }
            else
            {
                // Jeff Lanning ([email protected]): Update to support null value expressions and make error message less ambiguous.
                try {
                    this.nullValue = ConvertNullValue(nullValue, memberType);
                }
                catch (Exception ex) {
                    throw new MappingException("Mapping: Failed to convert nullValue '" + nullValue + "' to type " + memberType.FullName + " for member '" + member + "'.", ex);
                }
            }
            if (parameter == null || parameter.Length == 0)
            {
                if (persistType != PersistType.Concurrent)
                {
                    this.parameter = provider.GetParameterDefault(field);
                }
                else                   // Concurrent Parameter Name Fix by Stephan Wagner (http://www.calac.net)
                {
                    this.parameter = provider.GetParameterDefault(member);
                }
            }
            else
            {
                this.parameter = parameter;
            }
        }
示例#33
0
 // Includes Support for Enumerated Member Types from Jerry Shea (http://www.RenewTek.com)
 internal static object SetField(EntityMap entityMap, object entityObject, string member, object value, CustomProvider provider)
 {
     Type type = EntityMap.GetType(entityMap.Member(member));
     object typedValue = QueryHelper.ChangeType(value, type);
     if (entityMap.HasHelper) {
         try {
             ((IObjectHelper)entityObject)[member] = typedValue;
         }
         catch (Exception exception) {
             if (typedValue == null) {
                 throw new ORMapperException("ObjectSpace: SetField failed for NULL " + member + " : " + entityMap.Type, exception);
             }
             else {
                 throw new MappingException("Mapping: IObjectHelper is missing " + member + " : " + entityMap.Type, exception);
             }
         }
     }
     else {
         try {
             // Improved Support for Embedded Objects from Chris Schletter (http://www.thzero.com)
             object memberValue = entityObject;
             string[] memberParts = member.Split('.');
             for (int index = 0; index < memberParts.Length; index++) {
                 string typeName = memberValue.GetType().ToString();
                 MemberInfo memberField = EntityMap.FindField(typeName, memberParts[index]);
                 if (index == memberParts.Length - 1) {
                     if (memberField is FieldInfo) {
                         (memberField as FieldInfo).SetValue(memberValue, typedValue);
                     }
                     else {
                         (memberField as PropertyInfo).SetValue(memberValue, typedValue, null);
                     }
                 }
                 else {
                     if (memberField is FieldInfo) {
                         memberValue = (memberField as FieldInfo).GetValue(memberValue);
                     }
                     else {
                         memberValue = (memberField as PropertyInfo).GetValue(memberValue, null);
                     }
                 }
             }
         }
         catch (Exception exception) {
             if (typedValue == null) {
                 throw new ORMapperException("ObjectSpace: SetField failed for NULL " + member + " : " + entityMap.Type, exception);
             }
             else {
                 throw new ORMapperException("ObjectSpace: SetField failed for " + member + " : " + entityMap.Type, exception);
             }
         }
     }
     return typedValue;
 }
示例#34
0
 internal Sql2005Commands(EntityMap entity, CustomProvider provider)
     : base(entity, provider)
 {
 }
示例#35
0
        internal void AddLookup(string member, string field, string nullValue, string alias,
                                string parameter, string table, string source, string dest, CustomProvider provider)
        {
            this.AddMember(member);
            FieldMap[] tempFields = new FieldMap[this.fields.Length + 1];
            this.fields.CopyTo(tempFields, 0);
            tempFields[this.fields.Length] = new LookupMap(member, field, nullValue,
                                                           parameter, table, source, dest, EntityMap.GetType(this.Member(member)), provider);
            this.readOnlyCount++;
            this.fields = tempFields;
            this.helper.Add(alias, this.fields.Length - 1);

            if (this.baseEntity != null && !this.baseEntity.subFields.ContainsKey(field))
            {
                this.baseEntity.subFields.Add(field, this.fields[this.fields.Length - 1]);
            }
        }
示例#36
0
		// Includes Null-Value Assistance from Tim Byng (http://www.missioninc.com)
		internal void AddField(string member, string field, string nullValue, string alias,
				string parameter, PersistType persistType, CustomProvider provider) {
			this.AddMember(member);
			FieldMap[] tempFields = new FieldMap[this.fields.Length + 1];
			this.fields.CopyTo(tempFields, 0);
			tempFields[this.fields.Length] = new FieldMap(member, field, nullValue,
				parameter, persistType, EntityMap.GetType(this.Member(member)), provider);
			int keyIndex = -1;
			for (int index = 0; index < this.keyMembers.Length; index++) {
				if (this.keyMembers[index].Equals(member)) keyIndex = index;
			}
			if (keyIndex > -1) {
				FieldMap[] tempKeyFields = new FieldMap[this.keyFields.Length + 1];
				this.keyFields.CopyTo(tempKeyFields, 0);
				tempKeyFields[this.keyFields.Length] = tempFields[this.fields.Length];
				this.keyFields = tempKeyFields;
			}
			if (persistType == PersistType.ReadOnly) this.readOnlyCount++;
			if (persistType == PersistType.Concurrent) this.concurrentCount++;
			this.fields = tempFields;
			this.helper.Add(alias, this.fields.Length - 1);

			if (this.baseEntity != null && !this.baseEntity.subFields.ContainsKey(field)) {
				this.baseEntity.subFields.Add(field, this.fields[this.fields.Length - 1]);
			}
		}
示例#37
0
		internal void AddLookup(string member, string field, string nullValue, string alias,
				string parameter, string table, string source, string dest, CustomProvider provider) {
			this.AddMember(member);
			FieldMap[] tempFields = new FieldMap[this.fields.Length + 1];
			this.fields.CopyTo(tempFields, 0);
			tempFields[this.fields.Length] = new LookupMap(member, field, nullValue,
				parameter, table, source, dest, EntityMap.GetType(this.Member(member)), provider);
			this.readOnlyCount++;
			this.fields = tempFields;
			this.helper.Add(alias, this.fields.Length - 1);

			if (this.baseEntity != null && !this.baseEntity.subFields.ContainsKey(field)) {
				this.baseEntity.subFields.Add(field, this.fields[this.fields.Length - 1]);
			}
		}
示例#38
0
 public TestConfigurationSection()
 {
     Custom = new CustomProvider();
 }
 public TestConfigurationSection()
 {
     Custom = new CustomProvider();
 }
示例#40
0
        private static ObjectSpace GetObjectSpace()
        {
            using (Stream mappingsFile = MappingsProvider.GetMappingsFile())
            {
                if (mappingsFile == null)
                {
                    throw new DataProviderException("Could not load mappings file");
                }
                else
                {
                    CustomProvider provider;
                    string         providerName     = ConnectionStringSettings.ProviderName;
                    string         connectionString = ConnectionStringSettings.ConnectionString;

                    #region Parse providername to get _objectSpace
                    switch (providerName)
                    {
                    case "System.Data.SqlClient":
                        _objectSpace = new ObjectSpace(mappingsFile, connectionString, Provider.Sql2005, 20, 5);
                        break;

                    case "System.Data.OleDb":
                        _objectSpace = new ObjectSpace(mappingsFile, connectionString, Provider.OleDb, 20, 5);
                        break;

                    case "System.Data.Odbc":
                        _objectSpace = new ObjectSpace(mappingsFile, connectionString, Provider.Odbc, 20, 5);
                        break;

                    case "System.Data.OracleClient":
                        _objectSpace = new ObjectSpace(mappingsFile, connectionString, Provider.Oracle, 20, 5);
                        break;

                    case "MySql.Data":
                        provider = new CustomProvider(
                            "MySql.Data",
                            "MySql.Data.MySqlClient.MySqlConnection",
                            "MySql.Data.MySqlClient.MySqlDataAdapter");
                        provider.StartDelimiter  = "`";
                        provider.EndDelimiter    = "`";
                        provider.ParameterPrefix = "?";
                        provider.IdentityQuery   = "SELECT LAST_INSERT_ID()";
                        provider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "ByteFX.MySqlClient":
                        provider = new CustomProvider(
                            "ByteFX.MySqlClient",
                            "ByteFX.Data.MySqlClient.MySqlConnection",
                            "ByteFX.Data.MySqlClient.MySqlDataAdapter");
                        provider.StartDelimiter  = "`";
                        provider.EndDelimiter    = "`";
                        provider.IdentityQuery   = "SELECT LAST_INSERT_ID()";
                        provider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "CoreLab.MySql":
                        provider = new CustomProvider(
                            "CoreLab.MySql",
                            "CoreLab.MySql.MySqlConnection",
                            "CoreLab.MySql.MySqlDataAdapter");
                        provider.StartDelimiter  = "`";
                        provider.EndDelimiter    = "`";
                        provider.IdentityQuery   = "SELECT LAST_INSERT_ID()";
                        provider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "Npgsql":
                        provider = new CustomProvider(
                            "Npgsql",
                            "Npgsql.NpgsqlConnection",
                            "Npgsql.NpgsqlDataAdapter");
                        provider.StartDelimiter  = "\"";
                        provider.EndDelimiter    = "\"";
                        provider.ParameterPrefix = ":";
                        provider.IdentityQuery   = "SELECT currval('{1}_{0}_seq')";
                        provider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "Finisar.SQLite":
                        provider = new CustomProvider(
                            "Finisar.SQLite",
                            "Finisar.SQLite.SQLiteConnection",
                            "Finisar.SQLite.SQLiteDataAdapter");
                        provider.StartDelimiter  = "[";
                        provider.EndDelimiter    = "]";
                        provider.IdentityQuery   = "SELECT last_insert_rowid()";
                        provider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "FirebirdSql.Data.Firebird":
                        provider = new CustomProvider(
                            "FirebirdSql.Data.Firebird",
                            "FirebirdSql.Data.Firebird.FbConnection",
                            "FirebirdSql.Data.Firebird.FbDataAdapter");
                        provider.StartDelimiter  = "\"";
                        provider.EndDelimiter    = "\"";
                        provider.IdentityQuery   = "SELECT gen_id(gen_{1}_id, 0) FROM RDB$DATABASE";
                        provider.SelectPageQuery = "SELECT FIRST {0} SKIP {1} *";
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "IBM.Data.DB2":
                        provider = new CustomProvider(
                            "IBM.Data.DB2",
                            "IBM.Data.DB2.DB2Connection",
                            "IBM.Data.DB2.DB2DataAdapter");
                        provider.StartDelimiter  = "`";
                        provider.EndDelimiter    = "`";
                        provider.IdentityQuery   = "VALUES IDENTITY_VAL_LOCAL()";
                        provider.SelectPageQuery = null;
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "VistaDB":
                        provider = new CustomProvider(
                            "VistaDB.Provider",
                            "VistaDB.VistaDBConnection",
                            "VistaDB.VistaDBDataAdapter");
                        provider.StartDelimiter  = "[";
                        provider.EndDelimiter    = "]";
                        provider.IdentityQuery   = "SELECT LastIdentity({0}) FROM {1}";
                        provider.SelectPageQuery = "SELECT TOP {2}, {0} *";
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "Sybase.Data.AseClient":
                        provider = new CustomProvider(
                            "Sybase.Data.AseClient",
                            "Sybase.Data.AseClient.AseConnection",
                            "Sybase.Data.AseClient.AseDataAdapter");
                        provider.StartDelimiter  = "[";
                        provider.EndDelimiter    = "]";
                        provider.IdentityQuery   = "SELECT @@IDENTITY";
                        provider.SelectPageQuery = null;
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "Mono.Data.SybaseClient":
                        provider = new CustomProvider(
                            "Mono.Data.SybaseClient",
                            "Mono.Data.SybaseClient.SybaseConnection",
                            "Mono.Data.SybaseClient.SybaseDataAdapter");
                        provider.StartDelimiter  = "[";
                        provider.EndDelimiter    = "]";
                        provider.IdentityQuery   = "SELECT @@IDENTITY";
                        provider.SelectPageQuery = null;
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "Wilson.XmlDbClient":
                        provider = new CustomProvider(
                            "WilsonXmlDbClient",
                            "Wilson.XmlDbClient.XmlDbConnection",
                            "Wilson.XmlDbClient.XmlDbDataAdapter");
                        provider.StartDelimiter  = "[";
                        provider.EndDelimiter    = "]";
                        provider.IdentityQuery   = "SELECT @@Identity;";
                        provider.SelectPageQuery = "SELECT * LIMIT {0} OFFSET {1}";
                        _objectSpace             = new ObjectSpace(mappingsFile, connectionString, provider, 20, 5);
                        break;

                    case "System.Data.SqlServerCe":
                        provider = new CustomProvider(
                            "System.Data.SqlServerCe",
                            "System.Data.SqlServerCe.SqlCeConnection",
                            "System.Data.SqlServerCe.SqlCeDataAdapter");
                        provider.StartDelimiter  = "[";
                        provider.EndDelimiter    = "]";
                        provider.IdentityQuery   = "SELECT SCOPE_IDENTITY()";
                        provider.SelectPageQuery = null;
                        break;

                    default:
                        throw new DataProviderException("ProviderName is invalid");
                    }
                    #endregion

                    // Create the log interceptor
                    IInterceptCommand interceptor = new ORMapperInterceptor();
                    _objectSpace.SetInterceptor(interceptor);

                    return(_objectSpace);
                }
            }
        }
示例#41
0
 internal Sql2005Commands(EntityMap entity, CustomProvider provider) : base(entity, provider)
 {
 }
示例#42
0
 internal LookupMap(string member, string field, string nullValue, string parameter, string table, string source, string dest, Type memberType, CustomProvider provider)
     : base(member, field, nullValue, parameter, PersistType.ReadOnly, memberType, provider)
 {
     if (table == null || table.Length == 0)
     {
         throw new MappingException("Mapping: Lookup table was Missing - " + member);
     }
     if (source == null || source.Length == 0)
     {
         throw new MappingException("Mapping: Lookup foreignKey was Missing - " + member);
     }
     if (dest == null || dest.Length == 0)
     {
         throw new MappingException("Mapping: Lookup lookupKey was Missing - " + member);
     }
     this.table  = table;
     this.source = source.Replace(", ", ",").Split(',');
     this.dest   = dest.Replace(", ", ",").Split(',');
 }
示例#43
0
 internal void AddMany(string member, string field, string type, string alias, string table, string parent, string child,
                       bool queryOnly, bool lazy, bool cascade, string filter, string sortOrder, string selectSP, string insertSP, string deleteSP, CustomProvider provider)
 {
     this.AddRelation(member, new ManyMap(member, field, type, alias, table, parent, child, queryOnly, lazy, cascade, filter, sortOrder, selectSP, insertSP, deleteSP, provider));
 }
示例#44
0
		internal void AddParent(string member, string field, string type, string alias, bool queryOnly, bool lazy, bool cascade, string filter, string sortOrder, string selectSP, CustomProvider provider) {
			this.AddRelation(member, new ParentMap(member, field, type, alias, queryOnly, lazy, cascade, filter, sortOrder, selectSP, provider));
		}
示例#45
0
 internal void AddParent(string member, string field, string type, string alias, bool queryOnly, bool lazy, bool cascade, string filter, string sortOrder, string selectSP, CustomProvider provider)
 {
     this.AddRelation(member, new ParentMap(member, field, type, alias, queryOnly, lazy, cascade, filter, sortOrder, selectSP, provider));
 }
示例#46
0
		internal void AddMany(string member, string field, string type, string alias, string table, string parent, string child,
				bool queryOnly, bool lazy, bool cascade, string filter, string sortOrder, string selectSP, string insertSP, string deleteSP, CustomProvider provider) {
			this.AddRelation(member, new ManyMap(member, field, type, alias, table, parent, child, queryOnly, lazy, cascade, filter, sortOrder, selectSP, insertSP, deleteSP, provider));
		}
示例#47
0
 internal ParentMap(string member, string field, string type, string alias, bool queryOnly, bool lazy, bool cascade, string filter, string selectSP, CustomProvider provider)
     : base(Relationship.Parent, member, field, type, alias, queryOnly, lazy, cascade, filter, selectSP, provider)
 {
 }
示例#48
0
 internal void AddChild(string member, string field, string type, string alias, bool queryOnly, bool lazy, bool cascade, string filter, string selectSP, CustomProvider provider)
 {
     this.AddRelation(member, new ChildMap(member, field, type, alias, queryOnly, lazy, cascade, filter, selectSP, provider));
     this.childRelations++;
 }
示例#49
0
 internal ChildMap(string member, string field, string type, string alias, bool queryOnly, bool lazy, bool cascade, string filter, string sortOrder, string selectSP, CustomProvider provider)
     : base(Relationship.Child, member, field, type, alias, queryOnly, lazy, cascade, filter, sortOrder, selectSP, provider)
 {
 }
示例#50
0
		internal OracleCommands(EntityMap entity, CustomProvider provider) : base(entity, provider)	{}