我很难将一对多和多对多的 SQL 关系映射到我的 pocos 中的列表。我已经尝试了所有方式的 Fetch 和 Query 以及属性,但我没有正确映射 pocos。这是类和 SQL 的简化版本:
波科斯:
[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;Product->Category 是多对多的,带有一个带有 ProductId 和 CategoryId 的外部参照表 [ProductCategory]。我得到的最接近的是 ProductVariant 列表,其中填充了正确数量的对象,但这些值是从 Product 数据映射的。
我与 PetaPoco 合作了很长时间,现在正尝试“升级”到 NPoco V3。如果使用 PetaPoco,我会使用 Relators 进行映射;使用 NPoco,在线示例对我不起作用。