ReferentialConstraintRoleElement.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / ReferentialConstraintRoleElement.cs / 1305376 / ReferentialConstraintRoleElement.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner       [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 

using System; 
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics; 
using System.Xml;
using System.Data; 
using System.Data.Metadata.Edm; 

namespace System.Data.EntityModel.SchemaObjectModel 
{
    /// 
    /// Represents an role element in referential constraint element.
    ///  
    internal sealed class ReferentialConstraintRoleElement : SchemaElement
    { 
        private List _roleProperties; 
        private IRelationshipEnd _end;
 
        /// 
        /// Constructs an EntityContainerAssociationSetEnd
        /// 
        /// Reference to the schema element. 
        public ReferentialConstraintRoleElement(ReferentialConstraint parentElement)
            : base( parentElement ) 
        { 
        }
 
        public IList RoleProperties
        {
            get
            { 
                if (_roleProperties == null)
                { 
                    _roleProperties = new List(); 
                }
                return _roleProperties; 
            }
        }

        public IRelationshipEnd End 
        {
            get 
            { 
                return _end;
            } 
        }

        protected override bool HandleElement(XmlReader reader)
        { 
            if (base.HandleElement(reader))
            { 
                return true; 
            }
            else if (CanHandleElement(reader, XmlConstants.PropertyRef)) 
            {
                HandlePropertyRefElement(reader);
                return true;
            } 

            return false; 
        } 

        protected override bool HandleAttribute(XmlReader reader) 
        {
            if (CanHandleAttribute(reader, XmlConstants.Role))
            {
                HandleRoleAttribute(reader); 
                return true;
            } 
 
            return false;
        } 

        /// 
        ///
        ///  
        /// 
        private void HandlePropertyRefElement(XmlReader reader) 
        { 
            PropertyRefElement property = new PropertyRefElement(ParentElement);
            property.Parse(reader); 
            this.RoleProperties.Add(property);
        }

        private void HandleRoleAttribute(XmlReader reader) 
        {
            string roleName; 
            Utils.GetString(Schema, reader, out roleName); 
            this.Name = roleName;
        } 

        /// 
        /// Used during the resolve phase to resolve the type name to the object that represents that type
        ///  
        internal override void ResolveTopLevelNames()
        { 
            Debug.Assert(!String.IsNullOrEmpty(this.Name), "RoleName should never be empty"); 
            IRelationship relationship = (IRelationship)this.ParentElement.ParentElement;
 
            if (!relationship.TryGetEnd(this.Name, out _end))
            {
                AddError(ErrorCode.InvalidRoleInRelationshipConstraint,
                         EdmSchemaErrorSeverity.Error, 
                         System.Data.Entity.Strings.InvalidEndRoleInRelationshipConstraint(this.Name, relationship.Name));
 
                return; 
            }
 
            // we are gauranteed that the _end has gone through ResolveNames, but
            // we are not gauranteed that it was successful
            if (_end.Type == null)
            { 
                // an error has already been added for this
                return; 
            } 

        } 

        internal override void Validate()
        {
            base.Validate(); 
            // we can't resolve these names until validate because they will reference properties and types
            // that may not be resolved when this objects ResolveNames gets called 
            Debug.Assert(_roleProperties != null, "xsd should have verified that there should be atleast one property ref element in referential role element"); 
            foreach (PropertyRefElement property in _roleProperties)
            { 
                if (!property.ResolveNames((SchemaEntityType)_end.Type))
                {
                    AddError(ErrorCode.InvalidPropertyInRelationshipConstraint,
                            EdmSchemaErrorSeverity.Error, 
                            System.Data.Entity.Strings.InvalidPropertyInRelationshipConstraint(
                                          property.Name, 
                                          this.Name)); 
                }
            } 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// 
// @owner       [....]
// @backupOwner [....] 
//--------------------------------------------------------------------- 

using System; 
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics; 
using System.Xml;
using System.Data; 
using System.Data.Metadata.Edm; 

namespace System.Data.EntityModel.SchemaObjectModel 
{
    /// 
    /// Represents an role element in referential constraint element.
    ///  
    internal sealed class ReferentialConstraintRoleElement : SchemaElement
    { 
        private List _roleProperties; 
        private IRelationshipEnd _end;
 
        /// 
        /// Constructs an EntityContainerAssociationSetEnd
        /// 
        /// Reference to the schema element. 
        public ReferentialConstraintRoleElement(ReferentialConstraint parentElement)
            : base( parentElement ) 
        { 
        }
 
        public IList RoleProperties
        {
            get
            { 
                if (_roleProperties == null)
                { 
                    _roleProperties = new List(); 
                }
                return _roleProperties; 
            }
        }

        public IRelationshipEnd End 
        {
            get 
            { 
                return _end;
            } 
        }

        protected override bool HandleElement(XmlReader reader)
        { 
            if (base.HandleElement(reader))
            { 
                return true; 
            }
            else if (CanHandleElement(reader, XmlConstants.PropertyRef)) 
            {
                HandlePropertyRefElement(reader);
                return true;
            } 

            return false; 
        } 

        protected override bool HandleAttribute(XmlReader reader) 
        {
            if (CanHandleAttribute(reader, XmlConstants.Role))
            {
                HandleRoleAttribute(reader); 
                return true;
            } 
 
            return false;
        } 

        /// 
        ///
        ///  
        /// 
        private void HandlePropertyRefElement(XmlReader reader) 
        { 
            PropertyRefElement property = new PropertyRefElement(ParentElement);
            property.Parse(reader); 
            this.RoleProperties.Add(property);
        }

        private void HandleRoleAttribute(XmlReader reader) 
        {
            string roleName; 
            Utils.GetString(Schema, reader, out roleName); 
            this.Name = roleName;
        } 

        /// 
        /// Used during the resolve phase to resolve the type name to the object that represents that type
        ///  
        internal override void ResolveTopLevelNames()
        { 
            Debug.Assert(!String.IsNullOrEmpty(this.Name), "RoleName should never be empty"); 
            IRelationship relationship = (IRelationship)this.ParentElement.ParentElement;
 
            if (!relationship.TryGetEnd(this.Name, out _end))
            {
                AddError(ErrorCode.InvalidRoleInRelationshipConstraint,
                         EdmSchemaErrorSeverity.Error, 
                         System.Data.Entity.Strings.InvalidEndRoleInRelationshipConstraint(this.Name, relationship.Name));
 
                return; 
            }
 
            // we are gauranteed that the _end has gone through ResolveNames, but
            // we are not gauranteed that it was successful
            if (_end.Type == null)
            { 
                // an error has already been added for this
                return; 
            } 

        } 

        internal override void Validate()
        {
            base.Validate(); 
            // we can't resolve these names until validate because they will reference properties and types
            // that may not be resolved when this objects ResolveNames gets called 
            Debug.Assert(_roleProperties != null, "xsd should have verified that there should be atleast one property ref element in referential role element"); 
            foreach (PropertyRefElement property in _roleProperties)
            { 
                if (!property.ResolveNames((SchemaEntityType)_end.Type))
                {
                    AddError(ErrorCode.InvalidPropertyInRelationshipConstraint,
                            EdmSchemaErrorSeverity.Error, 
                            System.Data.Entity.Strings.InvalidPropertyInRelationshipConstraint(
                                          property.Name, 
                                          this.Name)); 
                }
            } 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK