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 identifierName: Brand name (e.g., "Shimano", "St. Croix")Country,Region,City: Location informationWebsiteUrl: Brand websiteFacilityName: Manufacturing facilityIsActive: Whether brand is still activeDiscontinuedDate: When brand was discontinuedCreatedAt,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
FoundedYearfor brand age - Future: Add
ParentCompanyIdfor corporate structure - Future: Add
QualityRating(user-aggregated) - Future: Add
BrandType(Manufacturer, Retailer, Distributor) - Future: Add
LogoUrlfor branding - Index: Indexed on Name and IsActive
Rod
Purpose: Fishing rod entity with specifications.
Key Fields:
Id(Guid): Unique identifierBrandId: Manufacturer brandRodTypeId: Type of rod (Spinning, Casting, Fly, etc.)GearCategoryId: Category classificationName: Rod model nameLengthFt: Rod length in feetPower: 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 rangeLureRatingMinOz,LureRatingMaxOz: Lure weight rangeIsActive: Whether still in productionDiscontinuedDate: When discontinuedCreatedAt,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
WeightOzfor rod weight - Future: Add
WarrantyYearsfor 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 identifierBrandId: Manufacturer brandReelTypeId: Type of reel (Spinning, Baitcasting, Fly, etc.)GearCategoryId: Category classificationName: Reel model nameType: Additional type classificationGearRatio: Gear ratio (e.g., 6.2:1)MaxDragLb: Maximum drag in poundsLineCapacity: Line capacity descriptionWeightOz: Reel weight in ouncesIsActive: Whether still in productionDiscontinuedDate: When discontinuedCreatedAt,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
LeftHandRetrieveflag - Index: Indexed on (BrandId, IsActive)
Lure
Purpose: Fishing lure entity.
Key Fields:
Id(Guid): Unique identifierBrandId: Manufacturer brandLureTypeId: Type of lure (Crankbait, Spinnerbait, etc.)LureSubtypeId: Optional subtypeGearCategoryId: Category classificationName: Lure model nameDescription: Lure descriptionIsActive: Whether still in productionDiscontinuedDate: When discontinuedCreatedAt,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
Rattlesflag - 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 identifierBrandId: Manufacturer brandLineTypeId: Type of line (Monofilament, Braid, Fluorocarbon, etc.)GearCategoryId: Category classificationName: Line model nameDescription: Line descriptionIsActive: Whether still in productionDiscontinuedDate: When discontinuedCreatedAt,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
StretchPercentfor stretch characteristics - Future: Add
AbrasionResistancerating - Future: Add
UVResistancerating - Future: Add
Memoryrating (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 identifierUserId: Owner of the setupName: Optional name for identificationRodId,ReelId: Rod and reel componentsLineOnSetupId: Line configurationCreatedAt,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
IsDefaultflag for default setup - Future: Add
UsageCountdenormalized count - Future: Add
LastUsedAttimestamp - Future: Add
Notesfor setup notes - Future: Add
BestFor(species, conditions, methods) - Future: Add
Rating(user rating of setup) - Index: Indexed on UserId
Related Documentation
- Rod Building System - Custom rod building features
- Line Spooling System - Line spooling and management