/// <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(); }
/// <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(); }
/// <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(); }