示例#1
0
        private FunctionImportReturnTypeStructuralTypeColumn GetRename(
            StructuralType typeForRename)
        {
            FunctionImportReturnTypeStructuralTypeColumn structuralTypeColumn1 = this._columnListForType.FirstOrDefault <FunctionImportReturnTypeStructuralTypeColumn>((Func <FunctionImportReturnTypeStructuralTypeColumn, bool>)(t => t.Type == typeForRename));

            if (structuralTypeColumn1 != null)
            {
                return(structuralTypeColumn1);
            }
            FunctionImportReturnTypeStructuralTypeColumn structuralTypeColumn2 = this._columnListForIsTypeOfType.Where <FunctionImportReturnTypeStructuralTypeColumn>((Func <FunctionImportReturnTypeStructuralTypeColumn, bool>)(t => t.Type == typeForRename)).LastOrDefault <FunctionImportReturnTypeStructuralTypeColumn>();

            if (structuralTypeColumn2 != null)
            {
                return(structuralTypeColumn2);
            }
            IEnumerable <FunctionImportReturnTypeStructuralTypeColumn> structuralTypeColumns = this._columnListForIsTypeOfType.Where <FunctionImportReturnTypeStructuralTypeColumn>((Func <FunctionImportReturnTypeStructuralTypeColumn, bool>)(t => t.Type.IsAssignableFrom((EdmType)typeForRename)));

            if (structuralTypeColumns.Count <FunctionImportReturnTypeStructuralTypeColumn>() == 0)
            {
                return(new FunctionImportReturnTypeStructuralTypeColumn(this._defaultMemberName, typeForRename, false, (LineInfo)null));
            }
            return(FunctionImportReturnTypeStructuralTypeColumnRenameMapping.GetLowestParentInHierarchy(structuralTypeColumns));
        }
        internal FunctionImportStructuralTypeMappingKB(
            IEnumerable<FunctionImportStructuralTypeMapping> structuralTypeMappings,
            ItemCollection itemCollection)
        {
            DebugCheck.NotNull(structuralTypeMappings);
            DebugCheck.NotNull(itemCollection);

            m_itemCollection = itemCollection;

            // If no specific type mapping.
            if (structuralTypeMappings.Count() == 0)
            {
                // Initialize with defaults.
                ReturnTypeColumnsRenameMapping = new Dictionary<string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping>();
                NormalizedEntityTypeMappings =
                    new ReadOnlyCollection<FunctionImportNormalizedEntityTypeMapping>(
                        new List<FunctionImportNormalizedEntityTypeMapping>());
                DiscriminatorColumns = new ReadOnlyCollection<string>(new List<string>());
                MappedEntityTypes = new ReadOnlyCollection<EntityType>(new List<EntityType>());
                return;
            }

            var entityTypeMappings = structuralTypeMappings.OfType<FunctionImportEntityTypeMapping>();

            // FunctionImportEntityTypeMapping
            if (null != entityTypeMappings
                && null != entityTypeMappings.FirstOrDefault())
            {
                var isOfTypeEntityTypeColumnsRenameMapping =
                    new Dictionary<EntityType, Collection<FunctionImportReturnTypePropertyMapping>>();
                var entityTypeColumnsRenameMapping = new Dictionary<EntityType, Collection<FunctionImportReturnTypePropertyMapping>>();
                var normalizedEntityTypeMappings = new List<FunctionImportNormalizedEntityTypeMapping>();

                // Collect all mapped entity types.
                MappedEntityTypes = entityTypeMappings
                    .SelectMany(mapping => mapping.GetMappedEntityTypes(m_itemCollection))
                    .Distinct()
                    .ToList()
                    .AsReadOnly();

                // Collect all discriminator columns.
                DiscriminatorColumns = entityTypeMappings
                    .SelectMany(mapping => mapping.GetDiscriminatorColumns())
                    .Distinct()
                    .ToList()
                    .AsReadOnly();

                m_entityTypeLineInfos = new KeyToListMap<EntityType, LineInfo>(EqualityComparer<EntityType>.Default);
                m_isTypeOfLineInfos = new KeyToListMap<EntityType, LineInfo>(EqualityComparer<EntityType>.Default);

                foreach (var entityTypeMapping in entityTypeMappings)
                {
                    // Remember LineInfos for error reporting.
                    foreach (var entityType in entityTypeMapping.EntityTypes)
                    {
                        m_entityTypeLineInfos.Add(entityType, entityTypeMapping.LineInfo);
                    }
                    foreach (var isTypeOf in entityTypeMapping.IsOfTypeEntityTypes)
                    {
                        m_isTypeOfLineInfos.Add(isTypeOf, entityTypeMapping.LineInfo);
                    }

                    // Create map from column name to condition.
                    var columnMap = entityTypeMapping.Conditions.ToDictionary(
                        condition => condition.ColumnName,
                        condition => condition);

                    // Align conditions with discriminator columns.
                    var columnMappings = new List<FunctionImportEntityTypeMappingCondition>(DiscriminatorColumns.Count);
                    for (var i = 0; i < DiscriminatorColumns.Count; i++)
                    {
                        var discriminatorColumn = DiscriminatorColumns[i];
                        FunctionImportEntityTypeMappingCondition mappingCondition;
                        if (columnMap.TryGetValue(discriminatorColumn, out mappingCondition))
                        {
                            columnMappings.Add(mappingCondition);
                        }
                        else
                        {
                            // Null indicates the value for this discriminator doesn't matter.
                            columnMappings.Add(null);
                        }
                    }

                    // Create bit map for implied entity types.
                    var impliedEntityTypesBitMap = new bool[MappedEntityTypes.Count];
                    var impliedEntityTypesSet = new Set<EntityType>(entityTypeMapping.GetMappedEntityTypes(m_itemCollection));
                    for (var i = 0; i < MappedEntityTypes.Count; i++)
                    {
                        impliedEntityTypesBitMap[i] = impliedEntityTypesSet.Contains(MappedEntityTypes[i]);
                    }

                    // Construct normalized mapping.
                    normalizedEntityTypeMappings.Add(
                        new FunctionImportNormalizedEntityTypeMapping(this, columnMappings, new BitArray(impliedEntityTypesBitMap)));

                    // Construct the rename mappings by adding isTypeOf types and specific entity types to the corresponding lists.
                    foreach (var isOfType in entityTypeMapping.IsOfTypeEntityTypes)
                    {
                        if (!isOfTypeEntityTypeColumnsRenameMapping.Keys.Contains(isOfType))
                        {
                            isOfTypeEntityTypeColumnsRenameMapping.Add(
                                isOfType, new Collection<FunctionImportReturnTypePropertyMapping>());
                        }
                        foreach (var rename in entityTypeMapping.ColumnsRenameList)
                        {
                            isOfTypeEntityTypeColumnsRenameMapping[isOfType].Add(rename);
                        }
                    }
                    foreach (var entityType in entityTypeMapping.EntityTypes)
                    {
                        if (!entityTypeColumnsRenameMapping.Keys.Contains(entityType))
                        {
                            entityTypeColumnsRenameMapping.Add(entityType, new Collection<FunctionImportReturnTypePropertyMapping>());
                        }
                        foreach (var rename in entityTypeMapping.ColumnsRenameList)
                        {
                            entityTypeColumnsRenameMapping[entityType].Add(rename);
                        }
                    }
                }

                ReturnTypeColumnsRenameMapping =
                    new FunctionImportReturnTypeEntityTypeColumnsRenameBuilder(
                        isOfTypeEntityTypeColumnsRenameMapping,
                        entityTypeColumnsRenameMapping)
                        .ColumnRenameMapping;

                NormalizedEntityTypeMappings = new ReadOnlyCollection<FunctionImportNormalizedEntityTypeMapping>(
                    normalizedEntityTypeMappings);
            }
            else
            {
                // FunctionImportComplexTypeMapping
                Debug.Assert(
                    structuralTypeMappings.First() is FunctionImportComplexTypeMapping,
                    "only two types can have renames, complexType and entityType");
                var complexTypeMappings = structuralTypeMappings.Cast<FunctionImportComplexTypeMapping>();

                Debug.Assert(
                    complexTypeMappings.Count() == 1, "how come there are more than 1, complex type cannot derive from other complex type");

                ReturnTypeColumnsRenameMapping = new Dictionary<string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping>();
                foreach (var rename in complexTypeMappings.First().ColumnsRenameList)
                {
                    var columnRenameMapping = new FunctionImportReturnTypeStructuralTypeColumnRenameMapping(rename.CMember);
                    columnRenameMapping.AddRename(
                        new FunctionImportReturnTypeStructuralTypeColumn(
                            rename.SColumn,
                            complexTypeMappings.First().ReturnType,
                            false,
                            rename.LineInfo));
                    ReturnTypeColumnsRenameMapping.Add(rename.CMember, columnRenameMapping);
                }

                // Initialize the entity mapping data as empty.
                NormalizedEntityTypeMappings =
                    new ReadOnlyCollection<FunctionImportNormalizedEntityTypeMapping>(
                        new List<FunctionImportNormalizedEntityTypeMapping>());
                DiscriminatorColumns = new ReadOnlyCollection<string>(
                    new List<string>
                        {
                        });
                MappedEntityTypes = new ReadOnlyCollection<EntityType>(
                    new List<EntityType>
                        {
                        });
            }
        }
        internal FunctionImportStructuralTypeMappingKB(
            IEnumerable <FunctionImportStructuralTypeMapping> structuralTypeMappings,
            ItemCollection itemCollection)
        {
            DebugCheck.NotNull(structuralTypeMappings);
            DebugCheck.NotNull(itemCollection);

            m_itemCollection = itemCollection;

            // If no specific type mapping.
            if (structuralTypeMappings.Count() == 0)
            {
                // Initialize with defaults.
                ReturnTypeColumnsRenameMapping = new Dictionary <string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping>();
                NormalizedEntityTypeMappings   =
                    new ReadOnlyCollection <FunctionImportNormalizedEntityTypeMapping>(
                        new List <FunctionImportNormalizedEntityTypeMapping>());
                DiscriminatorColumns = new ReadOnlyCollection <string>(new List <string>());
                MappedEntityTypes    = new ReadOnlyCollection <EntityType>(new List <EntityType>());
                return;
            }

            var entityTypeMappings = structuralTypeMappings.OfType <FunctionImportEntityTypeMapping>();

            // FunctionImportEntityTypeMapping
            if (null != entityTypeMappings &&
                null != entityTypeMappings.FirstOrDefault())
            {
                var isOfTypeEntityTypeColumnsRenameMapping =
                    new Dictionary <EntityType, Collection <FunctionImportReturnTypePropertyMapping> >();
                var entityTypeColumnsRenameMapping = new Dictionary <EntityType, Collection <FunctionImportReturnTypePropertyMapping> >();
                var normalizedEntityTypeMappings   = new List <FunctionImportNormalizedEntityTypeMapping>();

                // Collect all mapped entity types.
                MappedEntityTypes = entityTypeMappings
                                    .SelectMany(mapping => mapping.GetMappedEntityTypes(m_itemCollection))
                                    .Distinct()
                                    .ToList()
                                    .AsReadOnly();

                // Collect all discriminator columns.
                DiscriminatorColumns = entityTypeMappings
                                       .SelectMany(mapping => mapping.GetDiscriminatorColumns())
                                       .Distinct()
                                       .ToList()
                                       .AsReadOnly();

                m_entityTypeLineInfos = new KeyToListMap <EntityType, LineInfo>(EqualityComparer <EntityType> .Default);
                m_isTypeOfLineInfos   = new KeyToListMap <EntityType, LineInfo>(EqualityComparer <EntityType> .Default);

                foreach (var entityTypeMapping in entityTypeMappings)
                {
                    // Remember LineInfos for error reporting.
                    foreach (var entityType in entityTypeMapping.EntityTypes)
                    {
                        m_entityTypeLineInfos.Add(entityType, entityTypeMapping.LineInfo);
                    }
                    foreach (var isTypeOf in entityTypeMapping.IsOfTypeEntityTypes)
                    {
                        m_isTypeOfLineInfos.Add(isTypeOf, entityTypeMapping.LineInfo);
                    }

                    // Create map from column name to condition.
                    var columnMap = entityTypeMapping.Conditions.ToDictionary(
                        condition => condition.ColumnName,
                        condition => condition);

                    // Align conditions with discriminator columns.
                    var columnMappings = new List <FunctionImportEntityTypeMappingCondition>(DiscriminatorColumns.Count);
                    for (var i = 0; i < DiscriminatorColumns.Count; i++)
                    {
                        var discriminatorColumn = DiscriminatorColumns[i];
                        FunctionImportEntityTypeMappingCondition mappingCondition;
                        if (columnMap.TryGetValue(discriminatorColumn, out mappingCondition))
                        {
                            columnMappings.Add(mappingCondition);
                        }
                        else
                        {
                            // Null indicates the value for this discriminator doesn't matter.
                            columnMappings.Add(null);
                        }
                    }

                    // Create bit map for implied entity types.
                    var impliedEntityTypesBitMap = new bool[MappedEntityTypes.Count];
                    var impliedEntityTypesSet    = new Set <EntityType>(entityTypeMapping.GetMappedEntityTypes(m_itemCollection));
                    for (var i = 0; i < MappedEntityTypes.Count; i++)
                    {
                        impliedEntityTypesBitMap[i] = impliedEntityTypesSet.Contains(MappedEntityTypes[i]);
                    }

                    // Construct normalized mapping.
                    normalizedEntityTypeMappings.Add(
                        new FunctionImportNormalizedEntityTypeMapping(this, columnMappings, new BitArray(impliedEntityTypesBitMap)));

                    // Construct the rename mappings by adding isTypeOf types and specific entity types to the corresponding lists.
                    foreach (var isOfType in entityTypeMapping.IsOfTypeEntityTypes)
                    {
                        if (!isOfTypeEntityTypeColumnsRenameMapping.Keys.Contains(isOfType))
                        {
                            isOfTypeEntityTypeColumnsRenameMapping.Add(
                                isOfType, new Collection <FunctionImportReturnTypePropertyMapping>());
                        }
                        foreach (var rename in entityTypeMapping.ColumnsRenameList)
                        {
                            isOfTypeEntityTypeColumnsRenameMapping[isOfType].Add(rename);
                        }
                    }
                    foreach (var entityType in entityTypeMapping.EntityTypes)
                    {
                        if (!entityTypeColumnsRenameMapping.Keys.Contains(entityType))
                        {
                            entityTypeColumnsRenameMapping.Add(entityType, new Collection <FunctionImportReturnTypePropertyMapping>());
                        }
                        foreach (var rename in entityTypeMapping.ColumnsRenameList)
                        {
                            entityTypeColumnsRenameMapping[entityType].Add(rename);
                        }
                    }
                }

                ReturnTypeColumnsRenameMapping =
                    new FunctionImportReturnTypeEntityTypeColumnsRenameBuilder(
                        isOfTypeEntityTypeColumnsRenameMapping,
                        entityTypeColumnsRenameMapping)
                    .ColumnRenameMapping;

                NormalizedEntityTypeMappings = new ReadOnlyCollection <FunctionImportNormalizedEntityTypeMapping>(
                    normalizedEntityTypeMappings);
            }
            else
            {
                // FunctionImportComplexTypeMapping
                Debug.Assert(
                    structuralTypeMappings.First() is FunctionImportComplexTypeMapping,
                    "only two types can have renames, complexType and entityType");
                var complexTypeMappings = structuralTypeMappings.Cast <FunctionImportComplexTypeMapping>();

                Debug.Assert(
                    complexTypeMappings.Count() == 1, "how come there are more than 1, complex type cannot derive from other complex type");

                ReturnTypeColumnsRenameMapping = new Dictionary <string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping>();
                foreach (var rename in complexTypeMappings.First().ColumnsRenameList)
                {
                    var columnRenameMapping = new FunctionImportReturnTypeStructuralTypeColumnRenameMapping(rename.CMember);
                    columnRenameMapping.AddRename(
                        new FunctionImportReturnTypeStructuralTypeColumn(
                            rename.SColumn,
                            complexTypeMappings.First().ReturnType,
                            false,
                            rename.LineInfo));
                    ReturnTypeColumnsRenameMapping.Add(rename.CMember, columnRenameMapping);
                }

                // Initialize the entity mapping data as empty.
                NormalizedEntityTypeMappings =
                    new ReadOnlyCollection <FunctionImportNormalizedEntityTypeMapping>(
                        new List <FunctionImportNormalizedEntityTypeMapping>());
                DiscriminatorColumns = new ReadOnlyCollection <string>(
                    new List <string>
                {
                });
                MappedEntityTypes = new ReadOnlyCollection <EntityType>(
                    new List <EntityType>
                {
                });
            }
        }
 internal FunctionImportStructuralTypeMappingKB(
     IEnumerable <FunctionImportStructuralTypeMapping> structuralTypeMappings,
     ItemCollection itemCollection)
 {
     this.m_itemCollection = itemCollection;
     if (structuralTypeMappings.Count <FunctionImportStructuralTypeMapping>() == 0)
     {
         this.ReturnTypeColumnsRenameMapping = new Dictionary <string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping>();
         this.NormalizedEntityTypeMappings   = new ReadOnlyCollection <FunctionImportNormalizedEntityTypeMapping>((IList <FunctionImportNormalizedEntityTypeMapping>) new List <FunctionImportNormalizedEntityTypeMapping>());
         this.DiscriminatorColumns           = new ReadOnlyCollection <string>((IList <string>) new List <string>());
         this.MappedEntityTypes = new ReadOnlyCollection <EntityType>((IList <EntityType>) new List <EntityType>());
     }
     else
     {
         IEnumerable <FunctionImportEntityTypeMapping> source1 = structuralTypeMappings.OfType <FunctionImportEntityTypeMapping>();
         if (source1 != null && source1.FirstOrDefault <FunctionImportEntityTypeMapping>() != null)
         {
             Dictionary <EntityType, Collection <FunctionImportReturnTypePropertyMapping> > isOfTypeEntityTypeColumnsRenameMapping = new Dictionary <EntityType, Collection <FunctionImportReturnTypePropertyMapping> >();
             Dictionary <EntityType, Collection <FunctionImportReturnTypePropertyMapping> > entityTypeColumnsRenameMapping         = new Dictionary <EntityType, Collection <FunctionImportReturnTypePropertyMapping> >();
             List <FunctionImportNormalizedEntityTypeMapping> entityTypeMappingList = new List <FunctionImportNormalizedEntityTypeMapping>();
             this.MappedEntityTypes     = new ReadOnlyCollection <EntityType>((IList <EntityType>)source1.SelectMany <FunctionImportEntityTypeMapping, EntityType>((Func <FunctionImportEntityTypeMapping, IEnumerable <EntityType> >)(mapping => mapping.GetMappedEntityTypes(this.m_itemCollection))).Distinct <EntityType>().ToList <EntityType>());
             this.DiscriminatorColumns  = new ReadOnlyCollection <string>((IList <string>)source1.SelectMany <FunctionImportEntityTypeMapping, string>((Func <FunctionImportEntityTypeMapping, IEnumerable <string> >)(mapping => mapping.GetDiscriminatorColumns())).Distinct <string>().ToList <string>());
             this.m_entityTypeLineInfos = new KeyToListMap <EntityType, LineInfo>((IEqualityComparer <EntityType>)EqualityComparer <EntityType> .Default);
             this.m_isTypeOfLineInfos   = new KeyToListMap <EntityType, LineInfo>((IEqualityComparer <EntityType>)EqualityComparer <EntityType> .Default);
             foreach (FunctionImportEntityTypeMapping entityTypeMapping in source1)
             {
                 foreach (EntityType entityType in entityTypeMapping.EntityTypes)
                 {
                     this.m_entityTypeLineInfos.Add(entityType, entityTypeMapping.LineInfo);
                 }
                 foreach (EntityType ofTypeEntityType in entityTypeMapping.IsOfTypeEntityTypes)
                 {
                     this.m_isTypeOfLineInfos.Add(ofTypeEntityType, entityTypeMapping.LineInfo);
                 }
                 Dictionary <string, FunctionImportEntityTypeMappingCondition> dictionary = entityTypeMapping.Conditions.ToDictionary <FunctionImportEntityTypeMappingCondition, string, FunctionImportEntityTypeMappingCondition>((Func <FunctionImportEntityTypeMappingCondition, string>)(condition => condition.ColumnName), (Func <FunctionImportEntityTypeMappingCondition, FunctionImportEntityTypeMappingCondition>)(condition => condition));
                 List <FunctionImportEntityTypeMappingCondition> columnConditions         = new List <FunctionImportEntityTypeMappingCondition>(this.DiscriminatorColumns.Count);
                 for (int index = 0; index < this.DiscriminatorColumns.Count; ++index)
                 {
                     string discriminatorColumn = this.DiscriminatorColumns[index];
                     FunctionImportEntityTypeMappingCondition mappingCondition;
                     if (dictionary.TryGetValue(discriminatorColumn, out mappingCondition))
                     {
                         columnConditions.Add(mappingCondition);
                     }
                     else
                     {
                         columnConditions.Add((FunctionImportEntityTypeMappingCondition)null);
                     }
                 }
                 bool[]           values = new bool[this.MappedEntityTypes.Count];
                 Set <EntityType> set    = new Set <EntityType>(entityTypeMapping.GetMappedEntityTypes(this.m_itemCollection));
                 for (int index = 0; index < this.MappedEntityTypes.Count; ++index)
                 {
                     values[index] = set.Contains(this.MappedEntityTypes[index]);
                 }
                 entityTypeMappingList.Add(new FunctionImportNormalizedEntityTypeMapping(this, columnConditions, new BitArray(values)));
                 foreach (EntityType ofTypeEntityType in entityTypeMapping.IsOfTypeEntityTypes)
                 {
                     if (!isOfTypeEntityTypeColumnsRenameMapping.Keys.Contains <EntityType>(ofTypeEntityType))
                     {
                         isOfTypeEntityTypeColumnsRenameMapping.Add(ofTypeEntityType, new Collection <FunctionImportReturnTypePropertyMapping>());
                     }
                     foreach (FunctionImportReturnTypePropertyMapping columnsRename in entityTypeMapping.ColumnsRenameList)
                     {
                         isOfTypeEntityTypeColumnsRenameMapping[ofTypeEntityType].Add(columnsRename);
                     }
                 }
                 foreach (EntityType entityType in entityTypeMapping.EntityTypes)
                 {
                     if (!entityTypeColumnsRenameMapping.Keys.Contains <EntityType>(entityType))
                     {
                         entityTypeColumnsRenameMapping.Add(entityType, new Collection <FunctionImportReturnTypePropertyMapping>());
                     }
                     foreach (FunctionImportReturnTypePropertyMapping columnsRename in entityTypeMapping.ColumnsRenameList)
                     {
                         entityTypeColumnsRenameMapping[entityType].Add(columnsRename);
                     }
                 }
             }
             this.ReturnTypeColumnsRenameMapping = new FunctionImportReturnTypeEntityTypeColumnsRenameBuilder(isOfTypeEntityTypeColumnsRenameMapping, entityTypeColumnsRenameMapping).ColumnRenameMapping;
             this.NormalizedEntityTypeMappings   = new ReadOnlyCollection <FunctionImportNormalizedEntityTypeMapping>((IList <FunctionImportNormalizedEntityTypeMapping>)entityTypeMappingList);
         }
         else
         {
             IEnumerable <FunctionImportComplexTypeMapping> source2 = structuralTypeMappings.Cast <FunctionImportComplexTypeMapping>();
             this.ReturnTypeColumnsRenameMapping = new Dictionary <string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping>();
             foreach (FunctionImportReturnTypePropertyMapping columnsRename in source2.First <FunctionImportComplexTypeMapping>().ColumnsRenameList)
             {
                 FunctionImportReturnTypeStructuralTypeColumnRenameMapping columnRenameMapping = new FunctionImportReturnTypeStructuralTypeColumnRenameMapping(columnsRename.CMember);
                 columnRenameMapping.AddRename(new FunctionImportReturnTypeStructuralTypeColumn(columnsRename.SColumn, (StructuralType)source2.First <FunctionImportComplexTypeMapping>().ReturnType, false, columnsRename.LineInfo));
                 this.ReturnTypeColumnsRenameMapping.Add(columnsRename.CMember, columnRenameMapping);
             }
             this.NormalizedEntityTypeMappings = new ReadOnlyCollection <FunctionImportNormalizedEntityTypeMapping>((IList <FunctionImportNormalizedEntityTypeMapping>) new List <FunctionImportNormalizedEntityTypeMapping>());
             this.DiscriminatorColumns         = new ReadOnlyCollection <string>((IList <string>) new List <string>());
             this.MappedEntityTypes            = new ReadOnlyCollection <EntityType>((IList <EntityType>) new List <EntityType>());
         }
     }
 }