Код Entity Framework первым для объекта с набором свойств - PullRequest
0 голосов
/ 19 марта 2020

Я использую C# и. Net ядро ​​с MySql и Entity Framework.

У меня есть объект с набором свойств. Например:

public class Product
{
  public int Id {get; set;}
  public string Name{get; set;}
  public IEnumarable<Property> Properties{get; set;}
}

public class Property
{
  public int Id {get; set;}
  public string Name{get; set;}
  public object Value{get; set;}
}

В этом случае в БД у меня должны быть таблицы Products, Properties (где описывается свойство, например, имя и некоторая дополнительная информация) и таблица ссылок ProductProperties, где хранятся идентификатор продукта, идентификатор proeprty. и значение.

Но я не могу понять, как это сделать с помощью подхода Code first.

Как я мог бы реализовать его сначала с помощью кода? Это хороший способ создать еще одну сущность PropertyValue и сохранить ее в Product?

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Хорошо, поэтому создайте таблицу, подобную этой:

public class ProductProprties
{
  public int ProductId {get; set;}
  public Product Product {get;set;}
  public int PropertyId {get; set;}
  public Property Property {get;set;}      
  //other props
}

Если вы используете EntityFramework Core, то вам необходимо добавить это и в свой контекст базы данных:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  modelBuilder.Entity<ProdcutProprties>().HasKey(x => new { x.ProductId , x.PropertyId });
}
0 голосов
/ 19 марта 2020

Что-то вроде этого должно дать вам отношение 1-ко-многим, хотя вам нужно дать типу Value, например, строку, чтобы сохранить его в базе данных, часто для таких динамических c решений, как вы, возможно, затем добавите type, чтобы указать тип для десериализации, но так как вы затем десериализовываете в любом случае, вы также можете просто добавить вещи как json или что-то еще в БД.

public class Product
{
  public int Id {get; set;}
  public string Name{get; set;}
  public ICollection<Property> Properties{get; set;}
}

public class Property
{
  public int Id {get; set;}
  public string Name {get; set;}
  public string Value {get; set;}
  public int ProductId {get; set;}
}

Если вы не делаете очень динамически c система, кажется, неправильно иметь свойства в виде таблицы, во многом зависит от того, что вы делаете, и, возможно, ключ-значение db может быть лучшим инструментом для работы, если это ваша основная проблема, как в это зависит от самых сложных вещей.

Этот пример основывается на соглашении, поэтому свойства, подобные ProductId, должны называться именно так. Вы можете посмотреть EntityTypeConfigurations, если хотите получить больший контроль над именами и связями и тому подобным, или использовать аннотации данных для выполнения той же работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...