//--------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Data.Metadata.Edm; //for RelationshipMultiplicity namespace System.Data.Objects.DataClasses { /// /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")] [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] public sealed class EdmRelationshipAttribute : System.Attribute { private readonly string _relationshipNamespaceName; private readonly string _relationshipName; private readonly string _role1Name; private readonly string _role2Name; private readonly RelationshipMultiplicity _role1Multiplicity; private readonly RelationshipMultiplicity _role2Multiplicity; private readonly Type _role1Type; private readonly Type _role2Type; private readonly bool _isForeignKey; /// /// Attribute containing the details for a relationship /// This should match the C-Space relationship information, but having it available in this /// attribute allows us access to this information even in O-Space when there is no context. /// There can be multiple attributes of this type in an assembly. /// public EdmRelationshipAttribute(string relationshipNamespaceName, string relationshipName, string role1Name, RelationshipMultiplicity role1Multiplicity, Type role1Type, string role2Name, RelationshipMultiplicity role2Multiplicity, Type role2Type) { _relationshipNamespaceName = relationshipNamespaceName; _relationshipName = relationshipName; _role1Name = role1Name; _role1Multiplicity = role1Multiplicity; _role1Type = role1Type; _role2Name = role2Name; _role2Multiplicity = role2Multiplicity; _role2Type = role2Type; } /// /// Attribute containing the details for a relationship /// This should match the C-Space relationship information, but having it available in this /// attribute allows us access to this information even in O-Space when there is no context. /// There can be multiple attributes of this type in an assembly. /// public EdmRelationshipAttribute(string relationshipNamespaceName, string relationshipName, string role1Name, RelationshipMultiplicity role1Multiplicity, Type role1Type, string role2Name, RelationshipMultiplicity role2Multiplicity, Type role2Type, bool isForeignKey) { _relationshipNamespaceName = relationshipNamespaceName; _relationshipName = relationshipName; _role1Name = role1Name; _role1Multiplicity = role1Multiplicity; _role1Type = role1Type; _role2Name = role2Name; _role2Multiplicity = role2Multiplicity; _role2Type = role2Type; _isForeignKey = isForeignKey; } /// /// The name of the namespace that the relationship is in /// public string RelationshipNamespaceName { get { return _relationshipNamespaceName; } } /// /// The name of a relationship /// public string RelationshipName { get { return _relationshipName; } } /// /// The name of the role /// public string Role1Name { get { return _role1Name; } } /// /// The multiplicity of the the RoleName in RelationshipName /// public RelationshipMultiplicity Role1Multiplicity { get { return _role1Multiplicity; } } /// /// The CLR type for the role associated with this relationship /// public Type Role1Type { get { return _role1Type; } } /// /// The name of the role /// public string Role2Name { get { return _role2Name; } } /// /// The multiplicity of the the RoleName in RelationshipName /// public RelationshipMultiplicity Role2Multiplicity { get { return _role2Multiplicity; } } /// /// The CLR type for the role associated with this relationship /// public Type Role2Type { get { return _role2Type; } } /// /// Indicates whether this is a common-value (or FK-based) relationship. /// public bool IsForeignKey { get { return _isForeignKey; } } } }