0
0

Database init

This commit is contained in:
Sergey Chebotar 2023-01-31 15:55:44 +03:00
parent cdd9f9e98b
commit a9e52b199b
10 changed files with 338 additions and 2 deletions

8
.gitignore vendored
View File

@ -454,4 +454,10 @@ $RECYCLE.BIN/
!.vscode/extensions.json
# libman libraries
wwwroot/lib/*
wwwroot/lib/*
# database image content
wwwroot/content/*
# database file
Database/MyDarlingDb.db

View File

@ -0,0 +1,79 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using MyDarling.Models;
#nullable disable
namespace MyDarling.Migrations
{
[DbContext(typeof(DataContext))]
[Migration("20230131125316_Init")]
partial class Init
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "7.0.2");
modelBuilder.Entity("MyDarling.Models.Figure", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("FilePath")
.IsRequired()
.HasColumnType("TEXT");
b.Property<int?>("UnderwearBundleId")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("UnderwearBundleId");
b.ToTable("Figures");
});
modelBuilder.Entity("MyDarling.Models.UnderwearBundle", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("TEXT");
b.Property<decimal>("Price")
.HasColumnType("TEXT");
b.HasKey("Id");
b.ToTable("UnderwearBundles");
});
modelBuilder.Entity("MyDarling.Models.Figure", b =>
{
b.HasOne("MyDarling.Models.UnderwearBundle", null)
.WithMany("Figures")
.HasForeignKey("UnderwearBundleId");
});
modelBuilder.Entity("MyDarling.Models.UnderwearBundle", b =>
{
b.Navigation("Figures");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,63 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace MyDarling.Migrations
{
/// <inheritdoc />
public partial class Init : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "UnderwearBundles",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Name = table.Column<string>(type: "TEXT", nullable: false),
Description = table.Column<string>(type: "TEXT", nullable: false),
Price = table.Column<decimal>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_UnderwearBundles", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Figures",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
FilePath = table.Column<string>(type: "TEXT", nullable: false),
UnderwearBundleId = table.Column<int>(type: "INTEGER", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Figures", x => x.Id);
table.ForeignKey(
name: "FK_Figures_UnderwearBundles_UnderwearBundleId",
column: x => x.UnderwearBundleId,
principalTable: "UnderwearBundles",
principalColumn: "Id");
});
migrationBuilder.CreateIndex(
name: "IX_Figures_UnderwearBundleId",
table: "Figures",
column: "UnderwearBundleId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Figures");
migrationBuilder.DropTable(
name: "UnderwearBundles");
}
}
}

View File

@ -0,0 +1,76 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using MyDarling.Models;
#nullable disable
namespace MyDarling.Migrations
{
[DbContext(typeof(DataContext))]
partial class DataContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "7.0.2");
modelBuilder.Entity("MyDarling.Models.Figure", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("FilePath")
.IsRequired()
.HasColumnType("TEXT");
b.Property<int?>("UnderwearBundleId")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("UnderwearBundleId");
b.ToTable("Figures");
});
modelBuilder.Entity("MyDarling.Models.UnderwearBundle", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("TEXT");
b.Property<decimal>("Price")
.HasColumnType("TEXT");
b.HasKey("Id");
b.ToTable("UnderwearBundles");
});
modelBuilder.Entity("MyDarling.Models.Figure", b =>
{
b.HasOne("MyDarling.Models.UnderwearBundle", null)
.WithMany("Figures")
.HasForeignKey("UnderwearBundleId");
});
modelBuilder.Entity("MyDarling.Models.UnderwearBundle", b =>
{
b.Navigation("Figures");
});
#pragma warning restore 612, 618
}
}
}

21
Models/DataContext.cs Normal file
View File

@ -0,0 +1,21 @@
using Microsoft.EntityFrameworkCore;
namespace MyDarling.Models
{
public class DataContext : DbContext
{
protected readonly IConfiguration configuration;
public DataContext(IConfiguration configuration)
{
this.configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder opts)
{
opts.UseSqlite(configuration.GetConnectionString("MyDarlingDb"));
}
public DbSet<UnderwearBundle> UnderwearBundles => Set<UnderwearBundle>();
public DbSet<Figure> Figures => Set<Figure>();
}
}

8
Models/Figure.cs Normal file
View File

@ -0,0 +1,8 @@
namespace MyDarling.Models
{
public class Figure
{
public int Id { get; set; }
public string FilePath { get; set; } = string.Empty;
}
}

56
Models/SeedData.cs Normal file
View File

@ -0,0 +1,56 @@
using Microsoft.EntityFrameworkCore;
namespace MyDarling.Models
{
public static class SeedData
{
public static void SeedDatabase(DataContext context)
{
context.Database.Migrate();
if (context.UnderwearBundles.Count() == 0)
{
var alice = new UnderwearBundle
{
Name = "Alice",
Figures = new List<Figure>
{
new Figure()
{
FilePath = "/content/0/img/IMG_4896.JPG"
},
new Figure()
{
FilePath = "/content/0/img/IMG_4902.JPG"
}
},
Description = @"Комплект из бежевого эластичного кружева с голубой отделкой.
В комплект входит бра, 2 трусиков (на высокой посадке и стандартной на регуляции) и чокер.
Низ можно сделать на выбор стринги/бразильянки.",
Price = 3000
};
var nikki = new UnderwearBundle
{
Name = "Nikki",
Figures = new List<Figure>
{
new Figure()
{
FilePath = "/content/1/img/IMG_4897.JPG"
},
new Figure()
{
FilePath = "/content/1/img/IMG_4898.JPG"
}
},
Description = @"Базовый сет из мягкой эластичной сетки.
В комплект входит лиф на косточках и 2 трусиков бразильянки на высокой посадке и стринги на стандартной посадке с регуляцией.
Доступен в цветах: желтый, черный, бежевый молочный.",
Price = 3800
};
context.UnderwearBundles.AddRange(alice, nikki);
context.SaveChanges();
}
}
}
}

11
Models/UnderwearBundle.cs Normal file
View File

@ -0,0 +1,11 @@
namespace MyDarling.Models
{
public class UnderwearBundle
{
public int Id { get; set; }
public string Name { get; set; } = "My Darling Bundle";
public ICollection<Figure> Figures { get; set; } = new List<Figure>();
public string Description { get; set; } = string.Empty;
public decimal Price { get; set; }
}
}

View File

@ -1,9 +1,22 @@
using Microsoft.EntityFrameworkCore;
using MyDarling.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<DataContext>(opts =>
{
opts.UseSqlite(builder.Configuration["ConnectionStrings:MyDarlingDb"]);
opts.EnableSensitiveDataLogging(true);
});
builder.Services.AddControllersWithViews();
var app = builder.Build();
app.UseStaticFiles();
app.MapControllers();
app.MapDefaultControllerRoute();
var context = app.Services.CreateScope().ServiceProvider.GetRequiredService<DataContext>();
app.Run();

View File

@ -5,5 +5,8 @@
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
"AllowedHosts": "*",
"ConnectionStrings": {
"MyDarlingDb": "Data Source=Database/MyDarlingDb.db"
}
}