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); }
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); }
private QueryProvider(Expression expression, InheritensObjectProvider <T> objectProvider) { _objectProvider = objectProvider; _queryexpression = expression; }
internal static Queryable Create(InheritensObjectProvider <T> objectProvider, Expression expression) { return(new Queryable(objectProvider, expression)); }
private Queryable(InheritensObjectProvider <T> objectProvider, Expression expression) { _returnedExpression = expression == null?Expression.Constant(this) : expression; _querryProvider = QueryProvider.Create(Expression, objectProvider); }
public DataBaseWorker(string connectionStringName, InheritensObjectProvider <T> objectProvider) { _objectProvider = objectProvider; _queue = DataBaseWorkerQueue.GetQueue(_connectionStringName = connectionStringName, objectProvider._databaseProvider); }