Exemple #1
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="BindingContext" /> class.
        /// </summary>
        /// <param name="bindingContext">
        ///     The binding context.
        /// </param>
        /// <exception cref="ArgumentNullException">
        ///     The type of <paramref name="bindingContext" /> is null.
        /// </exception>
        public BindingContext(BindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }

            this.preliminaryEntityReferences = bindingContext.preliminaryEntityReferences;

            this.DefaultColumnFamily = bindingContext.DefaultColumnFamily;
            this.IdPropertyName      = bindingContext.IdPropertyName != null
                ? new Regex(bindingContext.IdPropertyName.ToString(), RegexOptions.Compiled)
                : null;
            this.TimestampPropertyName = bindingContext.TimestampPropertyName != null
                ? new Regex(bindingContext.TimestampPropertyName.ToString(), RegexOptions.Compiled)
                : null;

            this.StrictExplicitColumnBinding = bindingContext.StrictExplicitColumnBinding;
            this.StrictExplicitTableBinding  = bindingContext.StrictExplicitTableBinding;
            this.StrictExplicitKeyBinding    = bindingContext.StrictExplicitKeyBinding;
            this.StrictStaticTableBinding    = bindingContext.StrictStaticTableBinding;
            this.StrictStaticColumnBinding   = bindingContext.StrictStaticColumnBinding;

            this.columnBindings =
                new ConcurrentTypeDictionary <BindingSpec <IColumnBinding> >(bindingContext.columnBindings);
            this.keyBindings   = new ConcurrentTypeDictionary <IKeyBinding>(bindingContext.keyBindings);
            this.tableBindings = new ConcurrentTypeDictionary <BindingSpec <ITableBinding> >(bindingContext.tableBindings);

            this.Refresh();
        }
Exemple #2
0
        /// <summary>
        ///     Refresh all lazy initializations.
        /// </summary>
        private void Refresh()
        {
            lock (this.syncRoot)
            {
                if (this.registeredColumnBindings == null || this.registeredColumnBindings.IsValueCreated)
                {
                    this.registeredColumnBindings = new Lazy <ConcurrentTypeDictionary <IColumnBinding> >(
                        () =>
                    {
                        var bindings = new ConcurrentTypeDictionary <IColumnBinding>();
                        foreach (var kv in this.columnBindings)
                        {
                            bindings.TryAdd(kv.Key, kv.Value.Binding);
                        }

                        return(bindings);
                    });
                }

                if (this.registeredColumnNames == null || this.registeredColumnNames.IsValueCreated)
                {
                    this.registeredColumnNames = new Lazy <IDictionary <string, ISet <string> > >(
                        () =>
                    {
                        var columnNames =
                            new System.Collections.Concurrent.ConcurrentDictionary <string, ISet <string> >();
                        foreach (var binding in this.RegisteredColumnBindings().Values)
                        {
                            var columnQualifiers = columnNames.GetOrAdd(binding.ColumnFamily,
                                                                        _ => new ConcurrentSet <string>());
                            if (binding.ColumnQualifier != null)
                            {
                                columnQualifiers.Add(binding.ColumnQualifier);
                            }
                        }

                        return(columnNames);
                    });
                }

                if (this.registeredTableBindings == null || this.registeredTableBindings.IsValueCreated)
                {
                    this.registeredTableBindings = new Lazy <ConcurrentTypeDictionary <ITableBinding> >(
                        () =>
                    {
                        var bindings = new ConcurrentTypeDictionary <ITableBinding>();
                        foreach (var kv in this.tableBindings)
                        {
                            bindings.TryAdd(kv.Key, kv.Value.Binding);
                        }

                        return(bindings);
                    });
                }
            }

            this.preliminaryEntityReferences.Clear();
        }
Exemple #3
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="BindingContext" /> class.
        /// </summary>
        public BindingContext()
        {
            this.preliminaryEntityReferences = new ConcurrentTypeDictionary <EntityReference>();

            this.DefaultColumnFamily   = "e";
            this.IdPropertyName        = DefaultIdPropertyName;
            this.TimestampPropertyName = DefaultTimestampPropertyName;

            this.Refresh();
        }