public IQueryable GetQueryable()
        {
            SqlDataTypeStoreTableKey tableKey = GetTableKey();


            IQueryable queryable;

            if (StoreTables.ContainsKey(tableKey))
            {
                queryable = SqlDataContextHelperClass.GetTable(_sqlDataTypeStoresContainer.GetDataContext(), StoreTables[tableKey]);
            }
            else
            {
                if (_listOfInterfaceType == null)
                {
                    _listOfInterfaceType = typeof(List <>);
                    _listOfInterfaceType = _listOfInterfaceType.MakeGenericType(InterfaceType);
                }

                IEnumerable list = (IEnumerable)Activator.CreateInstance(_listOfInterfaceType, null);

                return(list.AsQueryable());
            }


            return(queryable);
        }
示例#2
0
        private InitializeStoreResult EmbedDataContextInfo(InterfaceGeneratedClassesInfo initInfo, Type dataContextType)
        {
            var result = new InitializeStoreResult();

            if (initInfo.InterfaceType == null)
            {
                return(result);
            }

            result.InterfaceType = initInfo.InterfaceType;

            var sqlDataTypeStoreTables = new Dictionary <SqlDataTypeStoreTableKey, SqlDataTypeStoreTable>();

            foreach (SqlDataTypeStoreDataScope storeDataScope in initInfo.DataScopes)
            {
                var key = new SqlDataTypeStoreTableKey(storeDataScope.DataScopeName, storeDataScope.CultureName);

                result.TableNames.Add(key, storeDataScope.TableName);

                Verify.IsNotNull(initInfo.Fields, "Fields collection is null");

                StoreTypeInfo fieldInfo;
                if (!initInfo.Fields.TryGetValue(key, out fieldInfo))
                {
                    continue;
                }

                Verify.IsNotNull(fieldInfo, "Field info is missing");


                FieldInfo dataContextFieldInfo = dataContextType != null
                    ? dataContextType.GetField(fieldInfo.FieldName)
                    : fieldInfo.DataContextField;

                Type sqlDataProvdierHelperType = fieldInfo.SqlHelperClass;

                var sqlDataProviderHelper = (ISqlDataProviderHelper)Activator.CreateInstance(sqlDataProvdierHelperType);

                var sqlDataTypeStoreTable = new SqlDataTypeStoreTable(
                    initInfo.DataTypeDescriptor.DataTypeId,
                    dataContextFieldInfo,
                    sqlDataProviderHelper,
                    fieldInfo.FieldName,
                    fieldInfo.FieldType);
                _createdSqlDataTypeStoreTables.Add(sqlDataTypeStoreTable);

                sqlDataTypeStoreTables.Add(key, sqlDataTypeStoreTable);
            }


            var sqlDataTypeStore = new SqlDataTypeStore(result.InterfaceType,
                                                        sqlDataTypeStoreTables,
                                                        initInfo.DataTypeDescriptor.IsCodeGenerated,
                                                        _sqlDataTypeStoresContainer);

            result.SqlDataTypeStore = sqlDataTypeStore;

            return(result);
        }
        private SqlDataTypeStoreTable GetCurrentTable()
        {
            SqlDataTypeStoreTableKey tableKey = GetTableKey();

            if (StoreTables.ContainsKey(tableKey) == false)
            {
                throw new InvalidOperationException(string.Format("No SQL table defined for the interface type '{0}' in the data scope '{1}' and locale '{2}'", InterfaceType.FullName, tableKey.DataScopeIdentifierName, tableKey.LocaleCultureName));
            }

            return(StoreTables[tableKey]);
        }
示例#4
0
        private HelperClassesGenerationInfo CompileMissingClasses(DataTypeDescriptor dataTypeDescriptor, Dictionary <DataTypeDescriptor,
                                                                                                                     IEnumerable <SqlDataTypeStoreDataScope> > allSqlDataTypeStoreDataScopes,
                                                                  Dictionary <SqlDataTypeStoreTableKey, StoreTypeInfo> fields,
                                                                  List <SqlDataTypeStoreDataScope> storeDataScopesToCompile,
                                                                  List <SqlDataTypeStoreDataScope> storeDataScopesAlreadyCompiled)
        {
            return(new HelperClassesGenerationInfo
            {
                GenerateCodeAction = codeGenerationBuilder =>
                {
                    var sqlDataProviderCodeBuilder = new SqlDataProviderCodeBuilder(_dataProviderContext.ProviderName, codeGenerationBuilder);
                    sqlDataProviderCodeBuilder.AddDataType(dataTypeDescriptor, storeDataScopesToCompile);

                    sqlDataProviderCodeBuilder.AddExistingDataType(dataTypeDescriptor, storeDataScopesAlreadyCompiled);
                },
                PopulateFieldsAction = types =>
                {
                    foreach (SqlDataTypeStoreDataScope storeDataScope in storeDataScopesToCompile)
                    {
                        string dataContextFieldName = NamesCreator.MakeDataContextFieldName(storeDataScope.TableName);

                        string helperClassFullName = NamesCreator.MakeSqlDataProviderHelperClassFullName(
                            dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName);
                        Type helperClass = types.Single(f => f.FullName == helperClassFullName);

                        string entityClassFullName = NamesCreator.MakeEntityClassFullName(
                            dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName);
                        Type entityClass = types.Single(f => f.FullName == entityClassFullName);

                        var storeTableKey = new SqlDataTypeStoreTableKey(storeDataScope.DataScopeName, storeDataScope.CultureName);
                        fields[storeTableKey] = new StoreTypeInfo(dataContextFieldName, entityClass, helperClass);
                    }

                    foreach (SqlDataTypeStoreDataScope storeDataScope in storeDataScopesAlreadyCompiled)
                    {
                        string dataContextFieldName = NamesCreator.MakeDataContextFieldName(storeDataScope.TableName);

                        string helperClassFullName = NamesCreator.MakeSqlDataProviderHelperClassFullName(
                            dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName);
                        Type helperClass = TryGetGeneratedType(helperClassFullName);

                        string entityClassFullName = NamesCreator.MakeEntityClassFullName(
                            dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName);
                        Type entityClass = TryGetGeneratedType(entityClassFullName);

                        var storeTableKey = new SqlDataTypeStoreTableKey(storeDataScope.DataScopeName, storeDataScope.CultureName);
                        fields[storeTableKey] = new StoreTypeInfo(dataContextFieldName, entityClass, helperClass);
                    }
                }
            });
        }
        private InitializeStoreResult EmbedDataContextInfo(InterfaceGeneratedClassesInfo initInfo, Type dataContextType)
        {
            var result = new InitializeStoreResult();

            if (initInfo.InterfaceType == null)
            {
                return result;
            }

            result.InterfaceType = initInfo.InterfaceType;

            var sqlDataTypeStoreTables = new Dictionary<SqlDataTypeStoreTableKey, SqlDataTypeStoreTable>();
            foreach (SqlDataTypeStoreDataScope storeDataScope in initInfo.DataScopes)
            {
                var key = new SqlDataTypeStoreTableKey(storeDataScope.DataScopeName, storeDataScope.CultureName);

                result.TableNames.Add(key, storeDataScope.TableName);

                Verify.IsNotNull(initInfo.Fields, "Fields collection is null");

                StoreTypeInfo fieldInfo;
                if (!initInfo.Fields.TryGetValue(key, out fieldInfo))
                {
                    continue;
                }

                Verify.IsNotNull(fieldInfo, "Field info is missing");

                FieldInfo dataContextFieldInfo = dataContextType != null
                    ? dataContextType.GetField(fieldInfo.FieldName)
                    : fieldInfo.DataContextField;

                Type sqlDataProvdierHelperType = fieldInfo.SqlHelperClass;

                var sqlDataProviderHelper = (ISqlDataProviderHelper)Activator.CreateInstance(sqlDataProvdierHelperType);

                var sqlDataTypeStoreTable = new SqlDataTypeStoreTable(
                    initInfo.DataTypeDescriptor.DataTypeId,
                    dataContextFieldInfo,
                    sqlDataProviderHelper,
                    fieldInfo.FieldName,
                    fieldInfo.FieldType);
                _createdSqlDataTypeStoreTables.Add(sqlDataTypeStoreTable);

                sqlDataTypeStoreTables.Add(key, sqlDataTypeStoreTable);
            }

            var sqlDataTypeStore = new SqlDataTypeStore(result.InterfaceType,
                sqlDataTypeStoreTables,
                initInfo.DataTypeDescriptor.IsCodeGenerated,
                _sqlDataTypeStoresContainer);

            result.SqlDataTypeStore = sqlDataTypeStore;

            return result;
        }
        private HelperClassesGenerationInfo CompileMissingClasses(DataTypeDescriptor dataTypeDescriptor, Dictionary<DataTypeDescriptor, 
            IEnumerable<SqlDataTypeStoreDataScope>> allSqlDataTypeStoreDataScopes,
            Dictionary<SqlDataTypeStoreTableKey, StoreTypeInfo> fields,
            List<SqlDataTypeStoreDataScope> storeDataScopesToCompile,
            List<SqlDataTypeStoreDataScope> storeDataScopesAlreadyCompiled)
        {
            return new HelperClassesGenerationInfo
            {
                GenerateCodeAction = codeGenerationBuilder =>
                {
                    var sqlDataProviderCodeBuilder = new SqlDataProviderCodeBuilder(_dataProviderContext.ProviderName, codeGenerationBuilder);
                    sqlDataProviderCodeBuilder.AddDataType(dataTypeDescriptor, storeDataScopesToCompile);

                    sqlDataProviderCodeBuilder.AddExistingDataType(dataTypeDescriptor, storeDataScopesAlreadyCompiled);
                },
                PopulateFieldsAction = types =>
                {
                    foreach (SqlDataTypeStoreDataScope storeDataScope in storeDataScopesToCompile)
                    {
                        string dataContextFieldName = NamesCreator.MakeDataContextFieldName(storeDataScope.TableName);

                        string helperClassFullName = NamesCreator.MakeSqlDataProviderHelperClassFullName(
                            dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName);
                        Type helperClass = types.Single(f => f.FullName == helperClassFullName);

                        string entityClassFullName = NamesCreator.MakeEntityClassFullName(
                            dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName);
                        Type entityClass = types.Single(f => f.FullName == entityClassFullName);

                        var storeTableKey = new SqlDataTypeStoreTableKey(storeDataScope.DataScopeName, storeDataScope.CultureName);
                        fields[storeTableKey] = new StoreTypeInfo(dataContextFieldName, entityClass, helperClass);
                    }

                    foreach (SqlDataTypeStoreDataScope storeDataScope in storeDataScopesAlreadyCompiled)
                    {
                        string dataContextFieldName = NamesCreator.MakeDataContextFieldName(storeDataScope.TableName);

                        string helperClassFullName = NamesCreator.MakeSqlDataProviderHelperClassFullName(
                            dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName);
                        Type helperClass = TryGetGeneratedType(helperClassFullName);

                        string entityClassFullName = NamesCreator.MakeEntityClassFullName(
                            dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName);
                        Type entityClass = TryGetGeneratedType(entityClassFullName);

                        var storeTableKey = new SqlDataTypeStoreTableKey(storeDataScope.DataScopeName, storeDataScope.CultureName);
                        fields[storeTableKey] = new StoreTypeInfo(dataContextFieldName, entityClass, helperClass);
                    }
                }
            };
        }