0

私は次のようにpetapocorelationExtensionsを使用しています:

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; }
    }
4

2 に答える 2

1

これを試して。最初のオブジェクトだけでなく、2番目のオブジェクトのキーも指定します。

パラメータを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);

アップデート

上記のクラスに基づいて、何かが足りません。プロジェクトとUserProjectの間に1対多の関係があると想定しています(UserProjectは、プロジェクトとユーザーの間に多対多の関係にあるブリッジテーブルのようです)。このメソッドの目的はFetchOneToMany、リレーションシップの「多くの」側を取得し、それらすべてのオブジェクトをリレーションシップの「1つの」側のリストプロパティに配置することです。

List<UserProject>したがって、これを機能させるには、Projectクラスにtypeというプロパティが必要です。

public class Project
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<UserProject> UserProjects { get; set; }
}
于 2012-03-08T17:31:54.980 に答える
1

UserProjectテーブルがあると仮定します。UserProjectテーブルに参加しておらず、SQLで参照しているため、エラーは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を変更しません

于 2012-03-09T09:23:33.330 に答える