public RelationalObjectStore Register <T>() where T : class
        {
            if (!_relationalObjectProvider.ContainsKey(typeof(T)))
            {
                IObjectProvider newProvider = new InheritensObjectProvider <T>(_connectionString, _databaseProvider, _mappingOptionsSet);
                _relationalObjectProvider[typeof(T)] = newProvider;

                System.Reflection.MethodInfo registerMethod = null;
                List <Type> subTypes = typeof(T).GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public)
                                       .Where(x => x.GetCustomAttributes(typeof(ForeignObjectMappingAttribute), true).Any())
                                       .Select(x => x.PropertyType).Where(x => !_relationalObjectProvider.ContainsKey(x))
                                       .Distinct().ToList();
                subTypes.AddRange(
                    typeof(T).GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public)
                    .Where(x => x.GetCustomAttributes(typeof(ReferenceListMappingAttribute), true).Any())
                    .Select(x => x.PropertyType.GetGenericArguments().First()).Where(x => !_relationalObjectProvider.ContainsKey(x))
                    .Distinct());

                foreach (Type subType in subTypes.Where(x => x != typeof(T)).Distinct())
                {
                    if (registerMethod == null)
                    {
                        registerMethod = typeof(RelationalObjectStore).GetMethod("Register");
                    }

                    System.Linq.Expressions.Expression.Lambda <Action>(
                        System.Linq.Expressions.Expression.Call(System.Linq.Expressions.Expression.Constant(this), registerMethod.MakeGenericMethod(subType)))
                    .Compile()();
                }
            }
            return(this);
        }
Exemplo n.º 2
0
            internal static QueryProvider Create(Expression expression, InheritensObjectProvider <T> objectProvider)
            {
                if (_queryProvider == null)
                {
                    _queryProvider = new Dictionary <ValueComparedExpression <Expression>, WeakReference <QueryProvider> >();
                }

                QueryProvider returnValue;

                if (!_queryProvider.ContainsKey(expression))
                {
                    _queryProvider.Add(expression, new WeakReference <QueryProvider>(returnValue = new QueryProvider(expression, objectProvider)));
                }
                else if ((returnValue = _queryProvider[expression].Value) == null)
                {
                    _queryProvider[expression] = new WeakReference <QueryProvider>(returnValue = new QueryProvider(expression, objectProvider));
                }

                return(returnValue);
            }
Exemplo n.º 3
0
 private QueryProvider(Expression expression, InheritensObjectProvider <T> objectProvider)
 {
     _objectProvider  = objectProvider;
     _queryexpression = expression;
 }
Exemplo n.º 4
0
 internal static Queryable Create(InheritensObjectProvider <T> objectProvider, Expression expression)
 {
     return(new Queryable(objectProvider, expression));
 }
Exemplo n.º 5
0
            private Queryable(InheritensObjectProvider <T> objectProvider, Expression expression)
            {
                _returnedExpression = expression == null?Expression.Constant(this) : expression;

                _querryProvider = QueryProvider.Create(Expression, objectProvider);
            }
Exemplo n.º 6
0
 public DataBaseWorker(string connectionStringName, InheritensObjectProvider <T> objectProvider)
 {
     _objectProvider = objectProvider;
     _queue          = DataBaseWorkerQueue.GetQueue(_connectionStringName = connectionStringName, objectProvider._databaseProvider);
 }