У меня возникли трудности с сопоставлением отношений «один ко многим» и «многие ко многим» SQL со списками в моих pocos. Я пробовал все виды Fetch и Query, а также атрибуты, и я не получал правильно сопоставленные pocos. Вот упрощенная версия классов и SQL:NPoco One-To-Many и Many-To-Many
Pocos:
[NPoco.TableName("Product")]
[NPoco.PrimaryKey("ProductId")]
public class Product
{
public int ProductId { get; set; }
public List<Category> Categories { get; set; }
public string Name { get; set; }
public List<ProductVariant> ProductVariants { get; set; }
}
[NPoco.TableName("Category")]
[NPoco.PrimaryKey("CategoryId")]
public class Category : ModifiedDomainObject
{
public int CategoryId { get; set; }
public string Name { get; set; }
}
[NPoco.TableName("ProductVariant")]
[NPoco.PrimaryKey("ProductVariantId")]
public class ProductVariant : ModifiedDomainObject
{
public int ProductVariantId { get; set; }
public string Name { get; set; }
}
SQL запрос:
SELECT[Product].[ProductId],
[Product].[PublicId],
[Product].[Name],
[Category].[CategoryId],
[Category].[Name],
[ProductVariant]
[ProductVariantId],
[ProductVariant].[ProductId],
[ProductVariant].[Name],
FROM[Product]
JOIN[ProductCategory] on[ProductCategory].[ProductId] = [ProductCategory].[ProductId]
JOIN[Category] ON[ProductCategory].[CategoryId] = [Category].[CategoryId]
LEFT OUTER JOIN[ProductVariant] ON[Product].[ProductId] = [ProductVariant].[ProductId]
WHERE[Product].[ProductId] = 1
ORDER BY[Product].[ProductId],
[Category].[CategoryId],
[ProductVariant].[ProductVariantId];
Так, Product-> ProductVariant это один-ко-многим, с ProductVariant таблица переносится ProductId; а Категория продукта -> «Много-ко-многим» с таблицей xref [ProductCategory], в которой хранятся ProductId и CategoryId. Самое близкое, что я получил, это список ProductVariant, заполненный правильным количеством объектов, но значения отображаются из данных Product.
Я работал с PetaPoco в течение длительного времени, и теперь я пытаюсь «обновить» до NPoco V3. Где с PetaPoco я бы использовал Relators для отображения; с NPoco примеры онлайн не работают для меня.
Спасибо за ваш ответ, который я считаю правильным. Единственное разрешение приводит к поведению N + 1 (100 продуктов = 101 SQL-запросов), которое похоже на шаг назад от PetaPoco, поскольку я его использовал. – RobertMGlynn