Skip to main content

Gear Management Entities

Entities for managing fishing gear including rods, reels, lures, lines, and gear setups.

Brand

Purpose: Represents gear manufacturers/brands. Tracks brand ownership history for quality tracking.

Key Fields:

  • Id (Guid): Unique identifier
  • Name: Brand name (e.g., "Shimano", "St. Croix")
  • Country, Region, City: Location information
  • WebsiteUrl: Brand website
  • FacilityName: Manufacturing facility
  • IsActive: Whether brand is still active
  • DiscontinuedDate: When brand was discontinued
  • CreatedAt, UpdatedAt: Timestamps

Relationships:

  • One-to-many: Rods, Reels, Lures, Lines
  • One-to-many: BrandOwnershipHistory (as acquirer or acquired)

Usage Patterns:

// Get active brands
var brands = context.Brands
.Where(b => b.IsActive)
.OrderBy(b => b.Name)
.ToList();

// Get brand with ownership history
var brand = context.Brands
.Include(b => b.Acquisitions)
.Include(b => b.AcquiredBy)
.FirstOrDefault(b => b.Id == brandId);

Considerations:

  • Future: Add FoundedYear for brand age
  • Future: Add ParentCompanyId for corporate structure
  • Future: Add QualityRating (user-aggregated)
  • Future: Add BrandType (Manufacturer, Retailer, Distributor)
  • Future: Add LogoUrl for branding
  • Index: Indexed on Name and IsActive

Rod

Purpose: Fishing rod entity with specifications.

Key Fields:

  • Id (Guid): Unique identifier
  • BrandId: Manufacturer brand
  • RodTypeId: Type of rod (Spinning, Casting, Fly, etc.)
  • GearCategoryId: Category classification
  • Name: Rod model name
  • LengthFt: Rod length in feet
  • Power: Power rating (Ultra Light, Light, Medium, Heavy, etc.)
  • Action: Action rating (Fast, Moderate, Slow)
  • Pieces: Number of pieces (1, 2, 3, etc.)
  • LineRatingMinLb, LineRatingMaxLb: Line weight range
  • LureRatingMinOz, LureRatingMaxOz: Lure weight range
  • IsActive: Whether still in production
  • DiscontinuedDate: When discontinued
  • CreatedAt, UpdatedAt: Timestamps

Relationships:

  • Many-to-one: Brand, RodType, GearCategory
  • One-to-many: GearVariants, GearImages, GearTags, RetailLinks

Usage Patterns:

// Get rods by brand
var rods = context.Rods
.Where(r => r.BrandId == brandId && r.IsActive)
.Include(r => r.Brand)
.Include(r => r.RodType)
.ToList();

Considerations:

  • Future: Add Material (Graphite, Fiberglass, Composite)
  • Future: Add HandleType (Cork, EVA, Split-Grip)
  • Future: Add Guides (number and type)
  • Future: Add WeightOz for rod weight
  • Future: Add WarrantyYears for warranty information
  • Future: Add PriceRange (Budget, Mid-range, Premium)
  • Index: Indexed on (BrandId, IsActive)

Reel

Purpose: Fishing reel entity with specifications.

Key Fields:

  • Id (Guid): Unique identifier
  • BrandId: Manufacturer brand
  • ReelTypeId: Type of reel (Spinning, Baitcasting, Fly, etc.)
  • GearCategoryId: Category classification
  • Name: Reel model name
  • Type: Additional type classification
  • GearRatio: Gear ratio (e.g., 6.2:1)
  • MaxDragLb: Maximum drag in pounds
  • LineCapacity: Line capacity description
  • WeightOz: Reel weight in ounces
  • IsActive: Whether still in production
  • DiscontinuedDate: When discontinued
  • CreatedAt, UpdatedAt: Timestamps

Relationships:

  • Many-to-one: Brand, ReelType, GearCategory
  • One-to-many: GearVariants, GearImages, GearTags, RetailLinks

Usage Patterns:

// Get reels by gear ratio range
var reels = context.Reels
.Where(r => r.GearRatio >= 6.0m && r.GearRatio <= 7.0m)
.Include(r => r.Brand)
.ToList();

Considerations:

  • Future: Add RetrievePerTurn (inches of line retrieved per turn)
  • Future: Add BallBearings (number of ball bearings)
  • Future: Add DragType (Star, Lever, Front, Rear)
  • Future: Add HandleType (Single, Double)
  • Future: Add SpoolMaterial (Aluminum, Graphite, Composite)
  • Future: Add LeftHandRetrieve flag
  • Index: Indexed on (BrandId, IsActive)

Lure

Purpose: Fishing lure entity.

Key Fields:

  • Id (Guid): Unique identifier
  • BrandId: Manufacturer brand
  • LureTypeId: Type of lure (Crankbait, Spinnerbait, etc.)
  • LureSubtypeId: Optional subtype
  • GearCategoryId: Category classification
  • Name: Lure model name
  • Description: Lure description
  • IsActive: Whether still in production
  • DiscontinuedDate: When discontinued
  • CreatedAt, UpdatedAt: Timestamps

Relationships:

  • Many-to-one: Brand, LureType, LureSubtype, GearCategory
  • One-to-many: GearImages, GearTags, CrankbaitVariants
  • Many-to-many: FishSpecies (via LureTargetSpecies)

Usage Patterns:

// Get lures for target species
var lures = context.Lures
.Where(l => l.LureTargetSpecies.Any(ts => ts.FishSpeciesId == speciesId))
.Include(l => l.Brand)
.Include(l => l.LureType)
.ToList();

Considerations:

  • Future: Add ActionType (Suspending, Floating, Sinking)
  • Future: Add Rattles flag
  • Future: Add Hooks (number and size)
  • Future: Add RecommendedRetrieve (Slow, Medium, Fast)
  • Future: Add BestConditions (Clear, Stained, Muddy)
  • Index: Indexed on (BrandId, IsActive)

Line

Purpose: Fishing line entity.

Key Fields:

  • Id (Guid): Unique identifier
  • BrandId: Manufacturer brand
  • LineTypeId: Type of line (Monofilament, Braid, Fluorocarbon, etc.)
  • GearCategoryId: Category classification
  • Name: Line model name
  • Description: Line description
  • IsActive: Whether still in production
  • DiscontinuedDate: When discontinued
  • CreatedAt, UpdatedAt: Timestamps

Relationships:

  • Many-to-one: Brand, LineType, GearCategory
  • One-to-many: GearImages, GearTags, MonofilamentVariants

Usage Patterns:

// Get lines by type
var lines = context.Lines
.Where(l => l.LineTypeId == lineTypeId && l.IsActive)
.Include(l => l.Brand)
.ToList();

Considerations:

  • Future: Add Material (Nylon, PE, Fluorocarbon, etc.)
  • Future: Add StretchPercent for stretch characteristics
  • Future: Add AbrasionResistance rating
  • Future: Add UVResistance rating
  • Future: Add Memory rating (low memory = less coiling)
  • Index: Indexed on (BrandId, IsActive)

GearSetup

Purpose: User's saved gear configuration (rod + reel + line). Reusable across multiple log entries.

Key Fields:

  • Id (int): Unique identifier
  • UserId: Owner of the setup
  • Name: Optional name for identification
  • RodId, ReelId: Rod and reel components
  • LineOnSetupId: Line configuration
  • CreatedAt, UpdatedAt: Timestamps

Relationships:

  • Many-to-one: User (required)
  • Many-to-one: Rod, Reel (required)
  • Many-to-one: LineOnSetup (required)
  • One-to-many: FishingLogEntry, FishingSession

Usage Patterns:

// Create gear setup
var setup = new GearSetup
{{
UserId = userId,
Name = "Trolling Setup - Lake Michigan",
RodId = rodId,
ReelId = reelId,
LineOnSetupId = lineOnSetupId
}};

// Get user's gear setups
var setups = context.GearSetups
.Where(gs => gs.UserId == userId)
.Include(gs => gs.Rod)
.Include(gs => gs.Reel)
.Include(gs => gs.LineOnSetup)
.ToList();

Considerations:

  • Future: Add IsDefault flag for default setup
  • Future: Add UsageCount denormalized count
  • Future: Add LastUsedAt timestamp
  • Future: Add Notes for setup notes
  • Future: Add BestFor (species, conditions, methods)
  • Future: Add Rating (user rating of setup)
  • Index: Indexed on UserId