コード例 #1
0
        // internal for testing
        internal void CreateEntitySets(
            IEnumerable<TableDetailsRow> tableDetailsRows,
            EntityRegister entityRegister,
            IList<EntitySet> entitySetsForReadOnlyEntityTypes,
            DbObjectType objectType)
        {
            Debug.Assert(tableDetailsRows != null, "tableDetailsRows != null");
            Debug.Assert(entityRegister != null, "entityRegister != null");
            Debug.Assert(entitySetsForReadOnlyEntityTypes != null, "entitySetsForReadOnlyEntityTypes != null");
            Debug.Assert(
                objectType == DbObjectType.Table || objectType == DbObjectType.View,
                "Unexpected object type - only tables and views are supported");

            foreach (var tableDetailsRowsForTable in SplitRows(tableDetailsRows))
            {
                var firstRow = tableDetailsRowsForTable[0];

                bool needsDefiningQuery;
                var entityType = CreateEntityType(tableDetailsRowsForTable, out needsDefiningQuery);
                entityRegister.AddEntityType(firstRow.GetMostQualifiedTableName(), entityType);

                // skip EntitySet creation for invalid entity types. We still need the types themselves - they
                // will be written to the ssdl in comments for informational and debugging purposes.
                if (!MetadataItemHelper.IsInvalid(entityType))
                {
                    var entitySet =
                        EntitySet.Create(
                            entityType.Name,
                            !firstRow.IsSchemaNull() ? firstRow.Schema : null,
                            firstRow.TableName != entityType.Name ? firstRow.TableName : null,
                            null,
                            entityType,
                            new[]
                                {
                                    CreateStoreModelBuilderMetadataProperty(
                                        TypeAttributeName,
                                        objectType == DbObjectType.Table
                                            ? TablesTypeAttributeValue
                                            : ViewsTypeAttributeValue)
                                });

                    if (needsDefiningQuery)
                    {
                        entitySetsForReadOnlyEntityTypes.Add(entitySet);
                    }
                    else
                    {
                        entityRegister.AddEntitySet(entitySet);
                    }
                }
            }
        }