Esempio n. 1
0
        public EFColumnProvider(EntityType entityType, EFTableProvider table, EdmMember m, bool isPrimaryKey)
            : base(table)
        {
            EdmMember    = m;
            IsPrimaryKey = isPrimaryKey;
            _table       = table;
            MaxLength    = 0;
            Name         = EdmMember.Name;
            //
            IsCustomProperty = false;

            //
            var property = EdmMember as EdmProperty;

            if (property != null)
            {
                IsForeignKeyComponent = DetermineIsForeignKeyComponent(property);
                IsGenerated           = IsServerGenerated(property);
            }

            ProcessFacets();

            var navProp = m as NavigationProperty;

            if (navProp != null)
            {
                _isAssociation = true;
                long key = EFAssociationProvider.BuildRelationshipKey(entityType, navProp.FromEndMember);
                ((EFDataModelProvider)table.DataModel).RelationshipEndLookup[key] = this;
            }
        }
Esempio n. 2
0
        private bool DetermineIsForeignKeyComponent(EdmProperty property)
        {
            var navigationProperties = property.DeclaringType.Members.OfType <NavigationProperty>();

            // Look at all NavigationProperties (i.e. strongly-type relationship columns) of the table this column belong to and
            // see if there is a foreign key that matches this property
            // If this is a 1 to 0..1 relationship and we are processing the more primary side. i.e in the Student in Student-StudentDetail
            // and this is the primary key we don't want to check the relationship type since if there are no constraints we will treat the primary key as a foreign key.
            return(navigationProperties.Any(n => EFAssociationProvider.GetDependentPropertyNames(n, !IsPrimaryKey /* checkRelationshipType */).Contains(property.Name)));
        }