コード例 #1
0
 private void TestEquals(Func<object, object, bool> equals)
 {
     var sameInstace = new ExecutionStrategyKey("a", "b");
     Assert.True(
         equals(
             sameInstace,
             sameInstace));
     Assert.True(
         equals(
             new ExecutionStrategyKey("a", "b"),
             new ExecutionStrategyKey("a", "b")));
     Assert.True(
         equals(
             new ExecutionStrategyKey("a", null),
             new ExecutionStrategyKey("a", null)));
     Assert.False(
         equals(
             new ExecutionStrategyKey("a", "b1"),
             new ExecutionStrategyKey("a", "b2")));
     Assert.False(
         equals(
             new ExecutionStrategyKey("a", null),
             new ExecutionStrategyKey("a", "b2")));
     Assert.False(
         equals(
             new ExecutionStrategyKey("a1", "b"),
             new ExecutionStrategyKey("a2", "b")));
     Assert.False(
         equals(
             new ExecutionStrategyKey("a", "b"),
             null));
 }
コード例 #2
0
        private void TestEquals(Func <object, object, bool> equals)
        {
            var sameInstace = new ExecutionStrategyKey("a", "b");

            Assert.True(
                equals(
                    sameInstace,
                    sameInstace));
            Assert.True(
                equals(
                    new ExecutionStrategyKey("a", "b"),
                    new ExecutionStrategyKey("a", "b")));
            Assert.False(
                equals(
                    new ExecutionStrategyKey("a", "b1"),
                    new ExecutionStrategyKey("a", "b2")));
            Assert.False(
                equals(
                    new ExecutionStrategyKey("a1", "b"),
                    new ExecutionStrategyKey("a2", "b")));
            Assert.False(
                equals(
                    new ExecutionStrategyKey("a", "b"),
                    null));
        }
コード例 #3
0
        /// <inheritdoc />
        public override bool Equals(object obj)
        {
            ExecutionStrategyKey executionStrategyKey = obj as ExecutionStrategyKey;

            if (object.ReferenceEquals((object)executionStrategyKey, (object)null) || !this.ProviderInvariantName.Equals(executionStrategyKey.ProviderInvariantName, StringComparison.Ordinal))
            {
                return(false);
            }
            if (this.ServerName == null && executionStrategyKey.ServerName == null)
            {
                return(true);
            }
            if (this.ServerName != null)
            {
                return(this.ServerName.Equals(executionStrategyKey.ServerName, StringComparison.Ordinal));
            }
            return(false);
        }
コード例 #4
0
        private static IExecutionStrategy GetExecutionStrategy(
            DbConnection connection,
            DbProviderFactory providerFactory)
        {
            var entityConnection = connection as EntityConnection;
            if (entityConnection != null)
            {
                connection = entityConnection.StoreConnection;
            }

            // Using the type name of DbProviderFactory implementation instead of the provider invariant name for performance
            var cacheKey = new ExecutionStrategyKey(providerFactory.GetType().FullName, connection.DataSource);

            var factory = _executionStrategyFactories.GetOrAdd(
                cacheKey,
                k =>
                DbConfiguration.GetService<Func<IExecutionStrategy>>(
                    new ExecutionStrategyKey(
                    DbConfiguration.GetService<IProviderInvariantName>(providerFactory).Name,
                    connection.DataSource)));
            return factory();
        }
コード例 #5
0
        private static IDbExecutionStrategy GetExecutionStrategy(
            DbConnection connection,
            DbProviderFactory providerFactory,
            string providerInvariantName = null)
        {
            var entityConnection = connection as EntityConnection;
            if (entityConnection != null)
            {
                connection = entityConnection.StoreConnection;
            }

            var dataSource = DbInterception.Dispatch.Connection.GetDataSource(connection, new DbInterceptionContext());

            // Using the type name of DbProviderFactory implementation instead of the provider invariant name for performance
            var cacheKey = new ExecutionStrategyKey(providerFactory.GetType().FullName, dataSource);

            var factory = _executionStrategyFactories.GetOrAdd(
                cacheKey,
                k =>
                DbConfiguration.DependencyResolver.GetService<Func<IDbExecutionStrategy>>(
                    new ExecutionStrategyKey(
                    providerInvariantName ?? DbConfiguration.DependencyResolver.GetService<IProviderInvariantName>(providerFactory).Name,
                    dataSource)));
            return factory();
        }