Skip to main content
Namespace: Numa.Models

Properties

Property NameTypeDescription
UsersDbSet<User>Entity Framework container for Users
ConversationsDbSet<Conversation>Entity Framework container for Conversations
MessagesDbSet<Message>Entity Framework container for Messages
GroupsDbSet<Group>Entity Framework container for Groups
AdminSettingsDbSet<AdminSettings>Entity Framework container for Admin Settings
SermonCollectionsDbSet<SermonCollection>Entity Framework container for Sermon Collections
CitationsDbSet<Citation>Entity Framework container for Citations

Mapping & Partition Key Configuration

// Configure model mappings and partition keys
protected override void OnModelCreating( ModelBuilder modelBuilder )
{
    base.OnModelCreating( modelBuilder );

    // User entity configuration (PartitionKey = NameIdentifier)
    modelBuilder.Entity<User>().ToContainer( "Users" );  // Cosmos container name for Users
    modelBuilder.Entity<User>().HasPartitionKey( u => u.NameIdentifier );  // Partition key for Users (using NameIdentifier)

    // Conversation entity configuration (PartitionKey = UserId)
    modelBuilder.Entity<Conversation>().ToContainer( "Conversations" );  // Cosmos container name for Conversations
    modelBuilder.Entity<Conversation>().HasPartitionKey( c => c.CreatedByUserId );  // Partition key for Conversations (using UserId)

    // Message entity configuration (PartitionKey = ConversationId)
    modelBuilder.Entity<Message>().ToContainer( "Messages" );  // Cosmos container name for Messages
    modelBuilder.Entity<Message>().HasPartitionKey( m => m.ConversationId );  // Partition key for Messages (using ConversationId)

    // Group entity configuration (PartitionKey = GroupType)
    modelBuilder.Entity<Group>().ToContainer( "Groups" );  // Cosmos container name for Groups
    modelBuilder.Entity<Group>().HasPartitionKey( g => g.GroupType );  // Partition key for Groups (using GroupType)

    // AdminSettings entity configuration (PartitionKey = AppName)
    modelBuilder.Entity<AdminSettings>().ToContainer( "AdminSettings" );  // Cosmos container name for AdminSettings
    modelBuilder.Entity<AdminSettings>().HasPartitionKey( adsett => adsett.AppName );  // Partition key for AdminSettings (using AppName)

    // SermonCollection entity configuration (PartitionKey = CreatedByUserId)
    modelBuilder.Entity<SermonCollection>().ToContainer( "SermonCollections" );  // Cosmos container name for SermonCollections
    modelBuilder.Entity<SermonCollection>().HasPartitionKey( sc => sc.CreatedByUserId );  // Partition key for SermonCollections (using CreatedByUserId)

    // Citation entity configuration (PartitionKey = MessageId)
    modelBuilder.Entity<Citation>().ToContainer( "Citations" );  // Cosmos container name for Citations
    modelBuilder.Entity<Citation>().HasPartitionKey( ci => ci.MessageId );  // Partition key for SermonCollections (using MessageId)
}