2016-03-30 8 views
0

2つの選択肢が全く同じですが、そのうちの1つ(getBranchsForUser)がエラーをスローします。LINQ to Entitiesでこのselect文にエラーが発生するのはなぜですか?

public User GetUserByUsername(string username) 
{ 
    var db = new AdventureWorksEntities(); 
    User user = (from u in db.tabUser 
       where u.strUsername.Equals(username, StringComparison.CurrentCultureIgnoreCase) 
       select new User 
          { 
           strUsername = u.strUsername, 
           intID = u.intUserID, 
          } 
       ).FirstOrDefault(); 
    user.branchsList = getBranchsForUser(user.intID); 
    return user; 
} 

public List<Branch> getBranchsForUser(int userID) 
{ 
    var db = new AdventureWorksEntities(); 
    List<Branch> branchsList = (from u in db.tabBranchs 
           where u.intUserID.Equals(userID) 
           select new Branch 
             { 
              dblGoal = u.dblGoal, 
              intNbOfGradeForAYear = u.IntNBOfGradeForAYear, 
              strName = u.strName 
             } 
          ).ToList(); 
    return branchsList; 
} 

IはgetBranchsForUser方法において、次のエラーを取得:

[System.NotSupportedException] { "指定された型部材は 'intUserID' エンティティにLINQでサポートされていないだけイニシャライザ、エンティティメンバー。エンティティのナビゲーションプロパティがサポートされています。 "}
System.NotSupportedException

はなぜGetUserByUsername方法のためにもそれを得ることはありませんか?私はあなたがにマップされていないプロパティをマップしようとしていると思います

CREATE TABLE [dbo].[tabBranchs] (
[intBranchID]   INT  NOT NULL, 
[intUserID]   INT  NOT NULL, 
[strName]    TEXT  NOT NULL, 
[dblGoal]    FLOAT (53) NULL, 
[IntNBOfGradeForAYear] INT  NOT NULL, 
CONSTRAINT [PK_tabBranchs] PRIMARY KEY CLUSTERED ([intBranchID] ASC), 
CONSTRAINT [FK_tabBranchs_ToTable] FOREIGN KEY ([intUserID]) REFERENCES [dbo].[tabUser] ([intUserID]) 
); 

CREATE TABLE [dbo].[tabUser] (
    [intUserID] INT   NOT NULL, 
    [strUsername] VARCHAR (MAX) NOT NULL, 
    [strPassword] VARCHAR (MAX) NOT NULL, 
    CONSTRAINT [PK_tabUser] PRIMARY KEY CLUSTERED ([intUserID] ASC) 
); 

EDIT 2

public class Branch { 
    public string strName { get; set; } 
    public List<Mark> markList { get; set; } 
    public double dblAverage { get; set; } 
    public double? dblGoal { get; set; } 
    public bool bHasGoal { get; set; } 
    public int intNbOfGradeForAYear { get; set; } 

    public Branch(){} 

    public Branch(string branchName, double goal, int nbOfNotes) 
    { 
     // TODO: Complete member initialization 
     this.strName = branchName; 
     this.dblGoal = goal; 
     bHasGoal = true; 
     this.intNbOfGradeForAYear = nbOfNotes; 
    } 
+0

プロパティ 'intUserID'はdatabaにマップされていますか列? – Jehof

+0

'intUserId'の値をどうやって決めるのですか?それは計算列ですか、それともDBから直接得られますか? – Szeki

+0

それは私のDBから直接来る – joohn

答えて

0

EDIT 表の定義を(私は同じことを行います) Where式のデータベース列。マップされたプロパティに基づいて式を構築する必要があります。そのエラーのためにマップされていないintUserIDが発生しています。お役に立てれば。

public class Branch { 
    public string strName { get; set; } 
    public List<Mark> markList { get; set; } 
    public double dblAverage { get; set; } 
    public double? dblGoal { get; set; } 
    public bool bHasGoal { get; set; } 
    public int intNbOfGradeForAYear { get; set; } 
    public int intUserID { get; set; } //map it 

    public Branch(){} 

    public Branch(string branchName, double goal, int nbOfNotes,int userID) // add userID 
    { 
     // TODO: Complete member initialization 
     this.strName = branchName; 
     this.dblGoal = goal; 
     bHasGoal = true; 
     this.intNbOfGradeForAYear = nbOfNotes; 
     this.intUserID = userID; // map it 
    } 
} 
+0

マッピングされたプロパティで式を作成するにはどうすればよいですか? – joohn

+0

編集時にmap intUserID。プロパティを追加して割り当てます。 – bluetoothfx

+0

あなたが書いたものを追加しましたが、まだ動作しませんでした。それは完全な解決策でしたか? – joohn

0

intUserIDがあなたの代わりにこれを試みることができるFK制約

CONSTRAINT [FK_tabBranchs_ToTable] FOREIGN KEY ([intUserID]) REFERENCES [dbo].[tabUser] ([intUserID]) 

に参加するので、これが動作する場合だけ

where u.tabUser.intUserID.Equals(userID) 

をトラブルシューティングするために、あるかもしれないが、それはすることも必要である 以下のクエリが不必要な結合を引き起こさないかどうかを再確認してください。

+0

ユーザーが支店を所有しているため、私はu.tabUserでtabUserにアクセスできません – joohn

関連する問題