例如,我有两个表,例如:
CREATE TABLE [dbo].[Parent](
[Id] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO
BEGIN TRANSACTION;
INSERT INTO [dbo].[Parent]([Id], [Name])
SELECT 1, N'First parent' UNION ALL
SELECT 2, N'Second parent' UNION ALL
SELECT 3, N'Parent with no childrens'
COMMIT;
CREATE TABLE [dbo].[Child](
[Id] [int] NOT NULL,
[ParentId] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO
BEGIN TRANSACTION;
INSERT INTO [dbo].[Child]([Id], [ParentId], [Name])
SELECT 1, 1, N'First child' UNION ALL
SELECT 2, 2, N'Second child'
COMMIT;
然后是两个 c# 类,如:
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
}
当我使用 Petapoco 和关系扩展时(其中 db 是 Petapocos 数据库对象的一个实例):
var parents = db.FetchOneToMany<Parent, Child>(p => p.Id, "SELECT * FROM Parent AS p LEFT JOIN Child AS c ON p.Id = c.ParentId");
我得到了父母的预期结果,我的列表中的三个项目具有正确的 ID,但没有正确的孩子。前两个对于他们连接的孩子是正确的,“第一个孩子”和“第二个孩子”但是数据库中没有孩子的第三个父母会得到一个孩子的默认实例。我的意思是第三个父母有一个计数为 1 的孩子的集合。并且该列表包含一个只有默认值的孩子。Id = 0, Name = NULL, ParentId = 0
. 这不是我想要的。我希望该集合不包含任何孩子。我看到的替代方法是集合为空或 IList 的实例但没有项目。
我做错了什么,我该如何纠正?