Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

@@ -0,0 +1,325 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using RobotNet10.NavigationTune.Data;
#nullable disable
namespace RobotNet10.RobotApp.Data.Migrations.TuneDb
{
[DbContext(typeof(TuningDbContext))]
[Migration("20260227022756_AddTunDb")]
partial class AddTunDb
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "10.0.2");
modelBuilder.Entity("RobotNet10.NavigationTune.Data.TestScenarioEntity", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<string>("ConfigJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property<DateTime>("CreatedAt")
.HasColumnType("TEXT");
b.Property<string>("Description")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("TEXT");
b.Property<bool>("IsDefault")
.HasColumnType("INTEGER");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("TEXT");
b.Property<int>("Type")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("CreatedAt");
b.HasIndex("Name");
b.HasIndex("Type");
b.ToTable("test_scenarios", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.NavigationParameterSet", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<int>("ControllerType")
.HasColumnType("INTEGER");
b.Property<DateTime>("CreatedAt")
.HasColumnType("TEXT");
b.Property<string>("Description")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("TEXT");
b.Property<string>("EstimatorConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<bool>("IsDefault")
.HasColumnType("INTEGER");
b.Property<string>("MotorDynamicsConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("MovePidConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("TEXT");
b.Property<string>("NavigationConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("PurePursuitConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("RotatePidConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("SignalConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("StanleyConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<DateTime?>("UpdatedAt")
.HasColumnType("TEXT");
b.Property<int>("Version")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("CreatedAt");
b.HasIndex("IsDefault");
b.HasIndex("Name");
b.ToTable("parameter_sets", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.SafetyViolation", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<string>("Message")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("TEXT");
b.Property<int>("Severity")
.HasColumnType("INTEGER");
b.Property<Guid>("TestRunId")
.HasColumnType("TEXT");
b.Property<double>("Threshold")
.HasColumnType("REAL");
b.Property<DateTime>("Timestamp")
.HasColumnType("TEXT");
b.Property<int>("Type")
.HasColumnType("INTEGER");
b.Property<double>("Value")
.HasColumnType("REAL");
b.HasKey("Id");
b.HasIndex("TestRunId");
b.HasIndex("Timestamp");
b.HasIndex("TestRunId", "Timestamp");
b.ToTable("safety_violations", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.TestMetrics", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<double>("AccelerationStdDev")
.HasColumnType("REAL");
b.Property<double>("AverageSpeed")
.HasColumnType("REAL");
b.Property<double>("CompletionTime")
.HasColumnType("REAL");
b.Property<double>("CrossTrackErrorMean")
.HasColumnType("REAL");
b.Property<double>("CrossTrackErrorPeak")
.HasColumnType("REAL");
b.Property<double>("CrossTrackErrorRMS")
.HasColumnType("REAL");
b.Property<double>("CrossTrackErrorStdDev")
.HasColumnType("REAL");
b.Property<double>("EfficiencyScore")
.HasColumnType("REAL");
b.Property<double>("GoalHeadingError")
.HasColumnType("REAL");
b.Property<double>("GoalPositionError")
.HasColumnType("REAL");
b.Property<double>("HeadingErrorPeak")
.HasColumnType("REAL");
b.Property<double>("HeadingErrorRMS")
.HasColumnType("REAL");
b.Property<double>("MaxSpeed")
.HasColumnType("REAL");
b.Property<double>("OverallScore")
.HasColumnType("REAL");
b.Property<bool>("PassedCriteria")
.HasColumnType("INTEGER");
b.Property<double>("PathLengthRatio")
.HasColumnType("REAL");
b.Property<double>("SmoothnessScore")
.HasColumnType("REAL");
b.Property<Guid>("TestRunId")
.HasColumnType("TEXT");
b.Property<double>("TrackingScore")
.HasColumnType("REAL");
b.Property<double>("VelocityStdDev")
.HasColumnType("REAL");
b.HasKey("Id");
b.HasIndex("TestRunId")
.IsUnique();
b.ToTable("test_metrics", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.TestRun", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<double>("Duration")
.HasColumnType("REAL");
b.Property<DateTime?>("EndTime")
.HasColumnType("TEXT");
b.Property<string>("ErrorMessage")
.HasMaxLength(1000)
.HasColumnType("TEXT");
b.Property<string>("Notes")
.HasMaxLength(1000)
.HasColumnType("TEXT");
b.Property<Guid>("ParameterSetId")
.HasColumnType("TEXT");
b.Property<Guid>("ScenarioId")
.HasColumnType("TEXT");
b.Property<DateTime>("StartTime")
.HasColumnType("TEXT");
b.Property<int>("Status")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("ParameterSetId");
b.HasIndex("ScenarioId");
b.HasIndex("StartTime");
b.HasIndex("Status");
b.HasIndex("ScenarioId", "ParameterSetId");
b.ToTable("test_runs", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.SafetyViolation", b =>
{
b.HasOne("RobotNet10.NavigationTune.Shared.Models.TestRun", null)
.WithMany("SafetyViolations")
.HasForeignKey("TestRunId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.TestMetrics", b =>
{
b.HasOne("RobotNet10.NavigationTune.Shared.Models.TestRun", null)
.WithOne("Metrics")
.HasForeignKey("RobotNet10.NavigationTune.Shared.Models.TestMetrics", "TestRunId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.TestRun", b =>
{
b.Navigation("Metrics");
b.Navigation("SafetyViolations");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,233 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace RobotNet10.RobotApp.Data.Migrations.TuneDb
{
/// <inheritdoc />
public partial class AddTunDb : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "parameter_sets",
columns: table => new
{
Id = table.Column<Guid>(type: "TEXT", nullable: false),
Name = table.Column<string>(type: "TEXT", maxLength: 200, nullable: false),
Description = table.Column<string>(type: "TEXT", maxLength: 500, nullable: false),
CreatedAt = table.Column<DateTime>(type: "TEXT", nullable: false),
UpdatedAt = table.Column<DateTime>(type: "TEXT", nullable: true),
IsDefault = table.Column<bool>(type: "INTEGER", nullable: false),
Version = table.Column<int>(type: "INTEGER", nullable: false),
ControllerType = table.Column<int>(type: "INTEGER", nullable: false),
MovePidConfig = table.Column<string>(type: "TEXT", nullable: false),
RotatePidConfig = table.Column<string>(type: "TEXT", nullable: false),
PurePursuitConfig = table.Column<string>(type: "TEXT", nullable: false),
StanleyConfig = table.Column<string>(type: "TEXT", nullable: false),
EstimatorConfig = table.Column<string>(type: "TEXT", nullable: false),
SignalConfig = table.Column<string>(type: "TEXT", nullable: false),
MotorDynamicsConfig = table.Column<string>(type: "TEXT", nullable: false),
NavigationConfig = table.Column<string>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_parameter_sets", x => x.Id);
});
migrationBuilder.CreateTable(
name: "test_runs",
columns: table => new
{
Id = table.Column<Guid>(type: "TEXT", nullable: false),
ScenarioId = table.Column<Guid>(type: "TEXT", nullable: false),
ParameterSetId = table.Column<Guid>(type: "TEXT", nullable: false),
StartTime = table.Column<DateTime>(type: "TEXT", nullable: false),
EndTime = table.Column<DateTime>(type: "TEXT", nullable: true),
Status = table.Column<int>(type: "INTEGER", nullable: false),
Duration = table.Column<double>(type: "REAL", nullable: false),
Notes = table.Column<string>(type: "TEXT", maxLength: 1000, nullable: true),
ErrorMessage = table.Column<string>(type: "TEXT", maxLength: 1000, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_test_runs", x => x.Id);
});
migrationBuilder.CreateTable(
name: "test_scenarios",
columns: table => new
{
Id = table.Column<Guid>(type: "TEXT", nullable: false),
Name = table.Column<string>(type: "TEXT", maxLength: 200, nullable: false),
Description = table.Column<string>(type: "TEXT", maxLength: 500, nullable: false),
Type = table.Column<int>(type: "INTEGER", nullable: false),
CreatedAt = table.Column<DateTime>(type: "TEXT", nullable: false),
IsDefault = table.Column<bool>(type: "INTEGER", nullable: false),
ConfigJson = table.Column<string>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_test_scenarios", x => x.Id);
});
migrationBuilder.CreateTable(
name: "safety_violations",
columns: table => new
{
Id = table.Column<Guid>(type: "TEXT", nullable: false),
TestRunId = table.Column<Guid>(type: "TEXT", nullable: false),
Timestamp = table.Column<DateTime>(type: "TEXT", nullable: false),
Type = table.Column<int>(type: "INTEGER", nullable: false),
Severity = table.Column<int>(type: "INTEGER", nullable: false),
Value = table.Column<double>(type: "REAL", nullable: false),
Threshold = table.Column<double>(type: "REAL", nullable: false),
Message = table.Column<string>(type: "TEXT", maxLength: 500, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_safety_violations", x => x.Id);
table.ForeignKey(
name: "FK_safety_violations_test_runs_TestRunId",
column: x => x.TestRunId,
principalTable: "test_runs",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "test_metrics",
columns: table => new
{
Id = table.Column<Guid>(type: "TEXT", nullable: false),
TestRunId = table.Column<Guid>(type: "TEXT", nullable: false),
CrossTrackErrorRMS = table.Column<double>(type: "REAL", nullable: false),
CrossTrackErrorPeak = table.Column<double>(type: "REAL", nullable: false),
CrossTrackErrorMean = table.Column<double>(type: "REAL", nullable: false),
CrossTrackErrorStdDev = table.Column<double>(type: "REAL", nullable: false),
HeadingErrorRMS = table.Column<double>(type: "REAL", nullable: false),
HeadingErrorPeak = table.Column<double>(type: "REAL", nullable: false),
GoalPositionError = table.Column<double>(type: "REAL", nullable: false),
GoalHeadingError = table.Column<double>(type: "REAL", nullable: false),
VelocityStdDev = table.Column<double>(type: "REAL", nullable: false),
AccelerationStdDev = table.Column<double>(type: "REAL", nullable: false),
PathLengthRatio = table.Column<double>(type: "REAL", nullable: false),
CompletionTime = table.Column<double>(type: "REAL", nullable: false),
AverageSpeed = table.Column<double>(type: "REAL", nullable: false),
MaxSpeed = table.Column<double>(type: "REAL", nullable: false),
OverallScore = table.Column<double>(type: "REAL", nullable: false),
TrackingScore = table.Column<double>(type: "REAL", nullable: false),
SmoothnessScore = table.Column<double>(type: "REAL", nullable: false),
EfficiencyScore = table.Column<double>(type: "REAL", nullable: false),
PassedCriteria = table.Column<bool>(type: "INTEGER", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_test_metrics", x => x.Id);
table.ForeignKey(
name: "FK_test_metrics_test_runs_TestRunId",
column: x => x.TestRunId,
principalTable: "test_runs",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_parameter_sets_CreatedAt",
table: "parameter_sets",
column: "CreatedAt");
migrationBuilder.CreateIndex(
name: "IX_parameter_sets_IsDefault",
table: "parameter_sets",
column: "IsDefault");
migrationBuilder.CreateIndex(
name: "IX_parameter_sets_Name",
table: "parameter_sets",
column: "Name");
migrationBuilder.CreateIndex(
name: "IX_safety_violations_TestRunId",
table: "safety_violations",
column: "TestRunId");
migrationBuilder.CreateIndex(
name: "IX_safety_violations_TestRunId_Timestamp",
table: "safety_violations",
columns: new[] { "TestRunId", "Timestamp" });
migrationBuilder.CreateIndex(
name: "IX_safety_violations_Timestamp",
table: "safety_violations",
column: "Timestamp");
migrationBuilder.CreateIndex(
name: "IX_test_metrics_TestRunId",
table: "test_metrics",
column: "TestRunId",
unique: true);
migrationBuilder.CreateIndex(
name: "IX_test_runs_ParameterSetId",
table: "test_runs",
column: "ParameterSetId");
migrationBuilder.CreateIndex(
name: "IX_test_runs_ScenarioId",
table: "test_runs",
column: "ScenarioId");
migrationBuilder.CreateIndex(
name: "IX_test_runs_ScenarioId_ParameterSetId",
table: "test_runs",
columns: new[] { "ScenarioId", "ParameterSetId" });
migrationBuilder.CreateIndex(
name: "IX_test_runs_StartTime",
table: "test_runs",
column: "StartTime");
migrationBuilder.CreateIndex(
name: "IX_test_runs_Status",
table: "test_runs",
column: "Status");
migrationBuilder.CreateIndex(
name: "IX_test_scenarios_CreatedAt",
table: "test_scenarios",
column: "CreatedAt");
migrationBuilder.CreateIndex(
name: "IX_test_scenarios_Name",
table: "test_scenarios",
column: "Name");
migrationBuilder.CreateIndex(
name: "IX_test_scenarios_Type",
table: "test_scenarios",
column: "Type");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "parameter_sets");
migrationBuilder.DropTable(
name: "safety_violations");
migrationBuilder.DropTable(
name: "test_metrics");
migrationBuilder.DropTable(
name: "test_scenarios");
migrationBuilder.DropTable(
name: "test_runs");
}
}
}

View File

@@ -0,0 +1,322 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using RobotNet10.NavigationTune.Data;
#nullable disable
namespace RobotNet10.RobotApp.Data.Migrations.TuneDb
{
[DbContext(typeof(TuningDbContext))]
partial class TuningDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "10.0.2");
modelBuilder.Entity("RobotNet10.NavigationTune.Data.TestScenarioEntity", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<string>("ConfigJson")
.IsRequired()
.HasColumnType("TEXT");
b.Property<DateTime>("CreatedAt")
.HasColumnType("TEXT");
b.Property<string>("Description")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("TEXT");
b.Property<bool>("IsDefault")
.HasColumnType("INTEGER");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("TEXT");
b.Property<int>("Type")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("CreatedAt");
b.HasIndex("Name");
b.HasIndex("Type");
b.ToTable("test_scenarios", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.NavigationParameterSet", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<int>("ControllerType")
.HasColumnType("INTEGER");
b.Property<DateTime>("CreatedAt")
.HasColumnType("TEXT");
b.Property<string>("Description")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("TEXT");
b.Property<string>("EstimatorConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<bool>("IsDefault")
.HasColumnType("INTEGER");
b.Property<string>("MotorDynamicsConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("MovePidConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("TEXT");
b.Property<string>("NavigationConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("PurePursuitConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("RotatePidConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("SignalConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("StanleyConfig")
.IsRequired()
.HasColumnType("TEXT");
b.Property<DateTime?>("UpdatedAt")
.HasColumnType("TEXT");
b.Property<int>("Version")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("CreatedAt");
b.HasIndex("IsDefault");
b.HasIndex("Name");
b.ToTable("parameter_sets", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.SafetyViolation", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<string>("Message")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("TEXT");
b.Property<int>("Severity")
.HasColumnType("INTEGER");
b.Property<Guid>("TestRunId")
.HasColumnType("TEXT");
b.Property<double>("Threshold")
.HasColumnType("REAL");
b.Property<DateTime>("Timestamp")
.HasColumnType("TEXT");
b.Property<int>("Type")
.HasColumnType("INTEGER");
b.Property<double>("Value")
.HasColumnType("REAL");
b.HasKey("Id");
b.HasIndex("TestRunId");
b.HasIndex("Timestamp");
b.HasIndex("TestRunId", "Timestamp");
b.ToTable("safety_violations", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.TestMetrics", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<double>("AccelerationStdDev")
.HasColumnType("REAL");
b.Property<double>("AverageSpeed")
.HasColumnType("REAL");
b.Property<double>("CompletionTime")
.HasColumnType("REAL");
b.Property<double>("CrossTrackErrorMean")
.HasColumnType("REAL");
b.Property<double>("CrossTrackErrorPeak")
.HasColumnType("REAL");
b.Property<double>("CrossTrackErrorRMS")
.HasColumnType("REAL");
b.Property<double>("CrossTrackErrorStdDev")
.HasColumnType("REAL");
b.Property<double>("EfficiencyScore")
.HasColumnType("REAL");
b.Property<double>("GoalHeadingError")
.HasColumnType("REAL");
b.Property<double>("GoalPositionError")
.HasColumnType("REAL");
b.Property<double>("HeadingErrorPeak")
.HasColumnType("REAL");
b.Property<double>("HeadingErrorRMS")
.HasColumnType("REAL");
b.Property<double>("MaxSpeed")
.HasColumnType("REAL");
b.Property<double>("OverallScore")
.HasColumnType("REAL");
b.Property<bool>("PassedCriteria")
.HasColumnType("INTEGER");
b.Property<double>("PathLengthRatio")
.HasColumnType("REAL");
b.Property<double>("SmoothnessScore")
.HasColumnType("REAL");
b.Property<Guid>("TestRunId")
.HasColumnType("TEXT");
b.Property<double>("TrackingScore")
.HasColumnType("REAL");
b.Property<double>("VelocityStdDev")
.HasColumnType("REAL");
b.HasKey("Id");
b.HasIndex("TestRunId")
.IsUnique();
b.ToTable("test_metrics", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.TestRun", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<double>("Duration")
.HasColumnType("REAL");
b.Property<DateTime?>("EndTime")
.HasColumnType("TEXT");
b.Property<string>("ErrorMessage")
.HasMaxLength(1000)
.HasColumnType("TEXT");
b.Property<string>("Notes")
.HasMaxLength(1000)
.HasColumnType("TEXT");
b.Property<Guid>("ParameterSetId")
.HasColumnType("TEXT");
b.Property<Guid>("ScenarioId")
.HasColumnType("TEXT");
b.Property<DateTime>("StartTime")
.HasColumnType("TEXT");
b.Property<int>("Status")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("ParameterSetId");
b.HasIndex("ScenarioId");
b.HasIndex("StartTime");
b.HasIndex("Status");
b.HasIndex("ScenarioId", "ParameterSetId");
b.ToTable("test_runs", (string)null);
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.SafetyViolation", b =>
{
b.HasOne("RobotNet10.NavigationTune.Shared.Models.TestRun", null)
.WithMany("SafetyViolations")
.HasForeignKey("TestRunId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.TestMetrics", b =>
{
b.HasOne("RobotNet10.NavigationTune.Shared.Models.TestRun", null)
.WithOne("Metrics")
.HasForeignKey("RobotNet10.NavigationTune.Shared.Models.TestMetrics", "TestRunId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("RobotNet10.NavigationTune.Shared.Models.TestRun", b =>
{
b.Navigation("Metrics");
b.Navigation("SafetyViolations");
});
#pragma warning restore 612, 618
}
}
}