Я давно не работал с EF. В качестве упражнения я пишу core web api
, который позволяет отслеживать медиа пользователя. Носитель может быть открыткой, фотоальбомом, записью, книгой ...
Я хотел бы знать, как лучше всего использовать метод Add (createMedia):
[HttpPost]
public async Task<ActionResult<bool>> Add(Media media)
Моя модель состоит из нескольких определенных c классов, представляющих один тип носителя - например, открытки, фотоальбомы, записи и т. Д. c. Кроме того, существует тип мультимедиа, который содержит общие свойства для всех типов мультимедиа:
public class Media
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public MediaType Type { get; set; }
public bool InUse { get; set; }
public string Date { get; set; } //yyyy-mm-dd
public string Owner { get; set; }
}
В качестве примера одного из указанных c типов мультимедиа:
public class Postcard
{
[ForeignKey("Id")]
public int MediaId { get; set; }
public string From { get; set; }
public string To { get; set; }
public string Place { get; set; }
public string Language { get; set; }
}
Я разработал свой EntityFramework
db так, чтобы он состоял из отношения 1-1 между Media и соответствующей спецификацией c media table.
Как лучше всего писать метод Add? Должен ли он получить объект Media и на основе MediaType
создать соответствующий тип? Я начал с этого подхода, и действие получило второй параметр с именем detailsJson
, который я бы проанализировал и заполнил соответствующий объект с помощью отражения, но выяснил, что привязка POST
не будет связывать 2 объекта.
Я не очень разбираюсь в шаблонах проектирования. Должно ли существовать столько же AddBook, AddPostcard ... столько же типов носителей? Я так понимаю, что все модели должны быть POCO objects
, без наследования. Я читал про DTOs
, но не вижу, чем это мне здесь помогает.