File: System\Data\Mapping\ViewGeneration\Validation\BasicKeyConstraint.cs
Project: ndp\fx\src\DataEntity\System.Data.Entity.csproj (System.Data.Entity)
// <copyright file="BasicKeyConstraint.cs" company="Microsoft">
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
// @owner Microsoft
// @backupOwner Microsoft
using System.Data.Mapping.ViewGeneration.Structures;
using System.Collections.Generic;
namespace System.Data.Mapping.ViewGeneration.Validation
    using BasicSchemaConstraints = SchemaConstraints<BasicKeyConstraint>;
    // Class representing a key constraint on the basic cell relations
    internal class BasicKeyConstraint : KeyConstraint<BasicCellRelation, MemberProjectedSlot>
        #region Constructor
        //  Constructs a key constraint for the given relation and keyslots
        internal BasicKeyConstraint(BasicCellRelation relation, IEnumerable<MemberProjectedSlot> keySlots)
            : base(relation, keySlots, ProjectedSlot.EqualityComparer)
        { }
        #region Methods
        // effects: Propagates this constraint from the basic cell relation
        // to the corresponding view cell relation and returns the new constraint
        // If all the key slots are not being projected, returns null
        internal ViewKeyConstraint Propagate()
            ViewCellRelation viewCellRelation = CellRelation.ViewCellRelation;
            // If all slots appear in the projection, propagate key constraint
            List<ViewCellSlot> viewSlots = new List<ViewCellSlot>();
            foreach (MemberProjectedSlot keySlot in KeySlots)
                ViewCellSlot viewCellSlot = viewCellRelation.LookupViewSlot(keySlot);
                if (viewCellSlot == null)
                    // Slot is missing -- no key constraint on the view relation
                    return null;
            // Create a key on view relation
            ViewKeyConstraint viewKeyConstraint = new ViewKeyConstraint(viewCellRelation, viewSlots);
            return viewKeyConstraint;