Новое в ядре .NET здесь.Попытка создать структуру модели для размещения следующего:
- Одна таблица заданий с столбцом jsonb в postgres
- Несколько типов заданий, каждое из которых будет иметь определенныйСтрока столбца 'type'
- Каждый тип задания будет иметь свою собственную проверку для столбца json
Сейчас у меня есть две модели.JobsServer.Models.Job и JobsServer.Models.SubJobCategory.SpecificJob.Вот как это выглядит:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace JobsServer.Models
{
[Table("jobs")]
public class Job
{
[Column("id"), Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get; set;}
[Column("type"), Required]
public string Type {get; set;}
[Column("domain"), Required]
public string Domain {get; set;}
[Column("status"), Required]
public string Status {get; set;}
[Column("data", TypeName = "jsonb")]
public string Data {get; set;}
[Column("rescheduled_from_id")]
public int RescheduledFromId {get; set;}
[ForeignKey("RescheduledFromId")]
public Job RescheduledFrom {get; set;}
[Column("parent_job_id")]
public int ParentJobId {get; set;}
[ForeignKey("ParentJobId")]
public Job ParentJob {get; set;}
}
}
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using JobsServer.Models;
namespace JobsServer.Models.SubJobCategory
{
[Table("jobs")]
public class SpecificJob
{
[Column("id"), Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get; set;}
[Column("type"), Required]
public string Type {get; set;}
[Column("domain"), Required]
public string Domain {get; set;}
[Column("status"), Required]
public string Status {get; set;}
[Column("data", TypeName = "jsonb")]
public string Data {get; set;}
[Column("rescheduled_from_id")]
public int RescheduledFromId {get; set;}
[ForeignKey("RescheduledFromId")]
public Job RescheduledFrom {get; set;}
[Column("parent_job_id")]
public int ParentJobId {get; set;}
[ForeignKey("ParentJobId")]
public Job ParentJob {get; set;}
}
}
У меня тогда контекст работы выглядит следующим образом:
с использованием Microsoft.EntityFrameworkCore;
с использованием JobsServer.Models;
namespace JobsServer.Contexts
{
public class JobContext : DbContext
{
public JobContext(DbContextOptions<JobContext> options) : base(options)
{}
public DbSet<Job> Jobs {get; set;}
public DbSet<JobsServer.Models.SubJobCategory.SpecificJob> SpecificJob {get; set;}
}
}
Это дает мне ошибку:
Cannot use table 'jobs' for entity type 'Job' since it is being used for entity type 'SpecificJob' and there is no relationship between their primary keys.
Вероятно, я поступаю неправильно.Я исхожу из рубина на рельсах и в основном из эликсира, где я могу выполнить то, что я пытаюсь сделать здесь.
По сути, если пользователь отправляет сообщение для создания SpecificJob, я планирую установитьвведите 'specific_job', а затем проверьте данные JSON, чтобы соответствовать определенному формату.Конечно, будет несколько типов заданий, но вышеприведенная версия является упрощенной версией для проверки архитектуры.
Любая помощь или идеи приветствуются.