我正在使用petapoco relationExtensions以下内容:
Connection.db.FetchOneToMany<Project, UserProject>(x=>x.ID, string.Format(@"
SELECT *
FROM Project
WHERE project.id = userProject.ProjectID
AND userProject.UserID =" + userID +
" ORDER BY project.Name" ));
但有以下错误。
> The multi-part identifier "userProject.ProjectID" could not be bound. The multi-part identifier "userProject.UserID" could not be bound.
有什么问题?我错过了什么吗?
项目类定义
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
UserProject类定义
int id;
int userId;
int projectId;
public int ID
{
get { return id; }
set { id = value; }
}
public int UserID
{
get { return userId; }
set { userId = value; }
}
public int ProjectID
{
get { return projectId; }
set { projectId = value; }
}
答案 0 :(得分:1)
试试这个。它指定第二个对象的键以及第一个键。
还要注意参数的使用,而不是将其连接到sql字符串中。这不会给你一个错误,但最好是出于各种原因这样做。
修改强>
我刚注意到你实际上没有加入sql中的UserProject表。这就是为什么你得到上面的第一个错误。你真的是指下面的东西吗?
var projects = Connection.db.FetchOneToMany<Project, UserProject>(
x => x.ID,
"SELECT *
FROM Project
LEFT JOIN UserProject ON project.id = userProject.ProjectID
WHERE userProject.UserID = @0
ORDER BY project.Name", userID);
<强>更新强>
根据您上面的课程,您遗漏了一些东西。我假设你在Projects和UserProjects之间有一对多的关系(似乎UserProject可能是项目和用户之间多对多关系中的桥接表)。 FetchOneToMany
方法的目的是采用关系的“多”方面,并将所有这些对象放在关系“一”侧的列表属性中。
因此,您应该在Project类上有一个List<UserProject>
类型的属性,以使其正常工作。
public class Project
{
public int ID { get; set; }
public string Name { get; set; }
public List<UserProject> UserProjects { get; set; }
}
答案 1 :(得分:1)
假设有一个UserProject表;该错误是一个SQL错误,因为您没有加入UserProject表并在sql中引用它。试试这个:
Connection.db.FetchOneToMany<Project, UserProject>(x=>x.ID, string.Format(@"
SELECT *
FROM Project
left join userproject on userProject.ProjectID = project.id
where userProject.UserID =" + userID +
" ORDER BY project.Name" ));
关系扩展不会改变你的sql