コード例 #1
0
ファイル: Model.cs プロジェクト: gonbike/Destrier
        public static Boolean IsModel(Type t)
        {
            var table_attribute   = ModelCache.GetTableAttribute(t);
            var column_attributes = ModelCache.GetColumnMembers(t);

            return(table_attribute != null && column_attributes != null && column_attributes.Any());
        }
コード例 #2
0
ファイル: Model.cs プロジェクト: gonbike/Destrier
        public static String TableName(Type t)
        {
            var ta = ModelCache.GetTableAttribute(t);

            if (ta == null)
            {
                return(null);
            }

            if (!String.IsNullOrEmpty(ta.TableName))
            {
                return(ta.TableName);
            }
            else
            {
                return(t.Name);
            }
        }
コード例 #3
0
ファイル: Model.cs プロジェクト: gonbike/Destrier
        public static void CheckColumns(Type t)
        {
            if (ModelCache.GetTableAttribute(t) != null)
            {
                var databaseColumns = Schema.GetColumnsForTable(Model.TableName(t), Model.DatabaseName(t), Model.ConnectionString(t));
                var columnMembers   = Model.GenerateColumnMembers(t);

                foreach (var cm in columnMembers)
                {
                    var modelColumn = cm.ColumnAttribute;
                    if (!modelColumn.IsForReadOnly)
                    {
                        if (!databaseColumns.Any(c => c.Name.Equals(cm.Name, StringComparison.InvariantCultureIgnoreCase)))
                        {
                            throw new ColumnMissingException(String.Format("\'{0}\' : Column in the model doesn't map to the schema.", cm.Name));
                        }

                        var databaseColumn = databaseColumns.FirstOrDefault(c => c.Name.Equals(cm.Name, StringComparison.InvariantCultureIgnoreCase));

                        if (!modelColumn.IsPrimaryKey && databaseColumn.CanBeNull != modelColumn.CanBeNull)
                        {
                            throw new ColumnNullabilityException(String.Format("Column Nullability Mismatch : {4} DBColumn: {0} {2} ModelColumn: {1} {3}"
                                                                               , databaseColumn.Name
                                                                               , cm.Name
                                                                               , databaseColumn.CanBeNull.ToString()
                                                                               , modelColumn.CanBeNull.ToString()
                                                                               , Model.TableName(t))
                                                                 );
                        }
                    }
                }

                foreach (var column in databaseColumns)
                {
                    if (!column.IsForReadOnly)
                    {
                        if (!columnMembers.Any(c => c.Name.Equals(column.Name, StringComparison.InvariantCultureIgnoreCase)))
                        {
                            throw new ColumnMissingException(String.Format("\'{0}\' : Column in the schema ({1}) doesn't map to the model.", column.Name, Model.TableName(t)));
                        }
                    }
                }
            }
        }
コード例 #4
0
ファイル: Model.cs プロジェクト: gonbike/Destrier
        public static String ConnectionString(Type t)
        {
            var ta = ModelCache.GetTableAttribute(t);

            if (ta == null)
            {
                throw new SchemaMetadataException("Base Model classes must have a 'Table' attribute specifying the relation in the database to interact with!");
            }

            if (!String.IsNullOrEmpty(ta.ConnectionName))
            {
                return(DatabaseConfigurationContext.ConnectionStrings[ta.ConnectionName]);
            }
            else if (!String.IsNullOrEmpty(DatabaseConfigurationContext.DefaultConnectionString))
            {
                return(DatabaseConfigurationContext.DefaultConnectionString);
            }
            else
            {
                throw new SchemaMetadataException("No connection string for object.");
            }
        }
コード例 #5
0
ファイル: Model.cs プロジェクト: gonbike/Destrier
 public static Boolean UseNoLock(Type t)
 {
     return(ModelCache.GetTableAttribute(t).UseNoLock);
 }
コード例 #6
0
ファイル: Model.cs プロジェクト: gonbike/Destrier
        public static String SchemaName(Type t)
        {
            var schemaName = ModelCache.GetTableAttribute(t).SchemaName;

            return(schemaName ?? DatabaseConfigurationContext.DefaultSchemaName ?? "dbo");
        }
コード例 #7
0
ファイル: Model.cs プロジェクト: gonbike/Destrier
        public static String DatabaseName(Type t)
        {
            var databaseName = ModelCache.GetTableAttribute(t).DatabaseName;

            return(!String.IsNullOrEmpty(databaseName) ? databaseName : DatabaseConfigurationContext.DefaultDatabaseName);
        }
コード例 #8
0
ファイル: Model.cs プロジェクト: gonbike/Destrier
        public static String ConnectionName(Type t)
        {
            TableAttribute ta = ModelCache.GetTableAttribute(t);

            return(ta.ConnectionName ?? DatabaseConfigurationContext.DefaultConnectionName);
        }