neo4jclient: создание свойств / полей во время выполнения, без приложения с фиксированной схемой

Я создаю электронную торговлю с продуктами, имеющими свои собственные поля (Id, Name): это объект, который у меня есть в C#

public class Product
{
  public int Id { get; set; }
  public string Name { get; set; }
}

Это мой код для создания продукта в C# для neo4j

Console.WriteLine("Generate node: ");
var newProduct = new Product{Id=666, Name="Banana"};
client.Cypher
      .Create("(product:Product {newProduct})")
      .WithParams(new { newProduct })
      .ExecuteWithoutResults();

Предположим, что пользователю или мне нужно добавить некоторые другие атрибуты, такие как цена, в узел продукта, первым делом нужно добавить новый атрибут Product в класс.

..
public int price { get; set; }
..

А затем измените код шифра, чтобы добавить продукт с атрибутом / свойством net.

Понятно, что это жестко закодированный подход, который не годится для динамического БД / сайта.

Так как я привык к RDBMS, этот тип проблемы мог быть решен только с EAV и многочисленными опорами, я надеялся, что Nosql (то есть Neo4J) мог бы помочь мне в работе с полями переменных атрибутов без EAV. Код, который генерирует код, может быть решением?

  • Что приходит мне в голову, это использовать динамический код / ​​переменную или codeDom, это путь? Есть ли другие элегантные решения?
  • Пожалуйста, предоставьте некоторые объяснения или тему для изучения.
  • NoSql должен быть без схемы, но это приложение без схемы не так просто, я прав?

1 ответ

В базе данных без схемы схема находится в приложениях, которые ее используют.

Вы можете внести изменения в схему, по крайней мере, в базе данных с помощью инструмента, такого как Liquigraph

Если вы измените свои объекты, у вас будет код, который использует эти новые свойства, так что вам все равно придется адаптировать свой код, или?

Вы можете написать некоторый код (или использовать библиотеку, если она его поддерживает) для использования и гидратации произвольных объектов.

Другие вопросы по тегам