Beispiel #1
0
 /// <summary>
 /// Επιστρέφει τα μεταδεδομένα ενός παραμετρικού πεδίου της οντότητας
 /// </summary>
 /// <param name="customFieldId">Το ID του παραμετρικού πεδίου</param>
 /// <returns></returns>
 public ColumnMetadata GetCustomColumnMetadata(int customFieldId)
 {
     if (HasCustomColumn(customFieldId))
     {
         return(Columns
                .Select(c => c.Value)
                .FirstOrDefault(c => c.IsCustomColumn && c.CustomFieldId == customFieldId));
     }
     throw MetadataException.NonExistentCustomColumn(customFieldId, EntityName);
 }
Beispiel #2
0
        /// <summary>
        /// Επιστρέφει το όνομα του πίνακα που είναι συσχετισμένος με την όντότητα
        /// </summary>
        /// <param name="entityType">Ο τύπος της κλάσης που έχει μαρκαριστεί ως οντότητα</param>
        /// <returns></returns>
        /// <exception cref="MetadataException">Πετάει εξαίρεση σε περίπτωση που η οντότητα δεν έχει μαρκαριστεί με το <see cref="TableAttribute"/></exception>
        public static string GetTableName(Type entityType)
        {
            TableAttribute table = entityType.GetCustomAttribute <TableAttribute>();

            if (table == null)
            {
                throw MetadataException.MissingTableAttribute(entityType);
            }
            return(table.TableName);
        }
Beispiel #3
0
 /// <summary>
 /// Επιστρέφει τα μεταδεδομένα μιας στήλης
 /// </summary>
 /// <param name="columnName">Το όνομα της στήλης</param>
 /// <returns></returns>
 /// <exception cref="MetadataException">Πετάει exception εάν δεν υπάρχει η στήλη στην οντότητα</exception>
 public ColumnMetadata GetColumnMetadata(string columnName)
 {
     if (ContainsColumn(columnName))
     {
         return(Columns
                .Select(c => c.Value)
                .FirstOrDefault(c => c.ColumnName == columnName));
     }
     throw MetadataException.NonExistentColumn(columnName, EntityName);
 }
Beispiel #4
0
        /// <summary>
        /// Δημιουργεί ένα νέο αντικείμενο μεταδεδομένων οντότητας
        /// </summary>
        /// <param name="EntityType">Ο τύπος της κλάσης που έχει μαρκαριστεί ως οντότητα</param>
        public ClassMetadata(Type EntityType)
        {
            this.EntityType = EntityType ?? throw new ArgumentNullException(nameof(EntityType));
            if (!IsEntity(this.EntityType))
            {
                throw MetadataException.InvalidEntity(this.EntityType);
            }

            EntityName = this.EntityType.Name;
            CacheKey   = GetCacheKey(this.EntityType);
            TableName  = GetTableName(this.EntityType);
            Columns    = GetColumns(this.EntityType);
            try
            {
                //Εαν η οντότητα δεν έχει καμία στηλή με το IdentifierAttribute, η παρακάτω
                //γραμμή θα σκάσει και θα μας πάρει στο λαιμό της. Εξ ού και το try-catch
                IdentifierColumn = Columns
                                   .Select(c => c.Value)
                                   .First(c => c.IsIdentifier).ColumnName;
            } catch (Exception)
            {
                throw MetadataException.MissingIdentifierAttribute(EntityName);
            }

            //Σε αντίθεση με παραπάνω, οι οντότητες δεν είναι υποχρεωμένες να έχουν
            //παραμετρικά πεδία ή (πιο κάτω) στήλη Guid, οπότε εδώ αρκούν απλοί έλεγχοι
            //για την ύπαρξη παραμετρικών ή στήλης Guid
            if (HasCustomColumns())
            {
                CustomTable = Columns
                              .Select(c => c.Value)
                              .FirstOrDefault(c => c.IsCustomColumn)
                              ?.CustomFieldTable ?? string.Empty;
                CustomReferenceColumn = Columns
                                        .Select(c => c.Value)
                                        .FirstOrDefault(c => c.IsCustomColumn)
                                        ?.CustomFieldReference ?? string.Empty;
            }

            if (HasGuidColumn())
            {
                GuidColumn = Columns
                             .Select(c => c.Value)
                             .FirstOrDefault(c => c.IsRowGuid)
                             ?.ColumnName ?? string.Empty;
            }

            CacheControlAttribute cacheAttr = this.EntityType.GetCustomAttribute <CacheControlAttribute>();

            if (cacheAttr != null)
            {
                CacheDuration = cacheAttr.Duration;
                NoCache       = cacheAttr.NoCache;
            }

            SupportsOptimisticLocking = Columns
                                        .Select(c => c.Value)
                                        .Any(c => c.IsVersion);
            if (SupportsOptimisticLocking)
            {
                VersionColumn = Columns
                                .Select(c => c.Value)
                                .FirstOrDefault(c => c.IsVersion)
                                ?.ColumnName ?? string.Empty;
            }
        }