多部分标识符无法绑定错误消息petapoco

时间:2012-03-08 09:22:57

标签: petapoco

我正在使用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; }
    }

2 个答案:

答案 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