2012-02-07 3 views
0

私はコードファーストスタイルで構築しているプロジェクトにクラスを持つプロジェクトを持っています。問題は簡単です。問題のオブジェクトはUserとuserTypeです。オブジェクトがコードファーストで表示されない - MVC3プロジェクト

public class User 
{ 
    [Key] 
    public int id { get; set; } 

    [DisplayName("User Name")] 
    [Required(ErrorMessage = "User Name is required.")] 
    public string userName { get; set; } 

    [DataType(DataType.Password)] 
    [DisplayName("Password")] 
    [Required(ErrorMessage = "Password is required.")] 
    public string userPassword { get; set; } 

    [DisplayName("First Name")] 
    public string first_Name { get; set; } 

    [DisplayName("Last Name")] 
    public string last_Name { get; set; } 

    [DisplayName("Email")] 
    public string email { get; set; } 

    [DisplayName("Zip")] 
    public string Zip { get; set; } 

    [DisplayName("Address")] 
    public Address address { get; set; } 

    [DisplayName("Birthdate")] 
    public DateTime dateOfBirth { get; set; } 

    [DisplayName("Home phone")] 
    public string homePhone { get; set; } 

    [DisplayName("Cell phone")] 
    public string cellPhone { get; set; } 

    [DisplayName("Remember me")] 
    public bool persistCookie { get; set; } 

    public UserType userType { get; set; } 

    public int status { get; set; } 

} 

public class UserType 
{ 
    [Key] 
    public int id { get; set; } 
    public string typeName { get; set; } 

} 

私はこのようなユーザーを生成します。

userType = (from ret in db.UserTypes where ret.typeName.Equals("Contractor") select ret).FirstOrDefault(); 
       user.userType = userType; 
       user.status = 1; 
       db.Users.Add(user); 
       db.SaveChanges(); 

データベーススキーマはUserTypesテーブルへの外部キーをサポートしているようです。

すべては、addとデータベースでうまく動作します。適切なuserType_idを持つユーザーレコードが表示されます。

後でユーザーを取得するときに問題が発生します。私のUser.userTypeは常にnullです。これは本当に混乱しています。 USERTYPEキーがレコードのUsersテーブルにある場合は、なぜ私は私のユーザーの一部としてUSERTYPEオブジェクトを取得していない私のような標準のLINQクエリ使用して、そのユーザーを取得するとき:

User user = (from ret in db.Users where ret.userName.Equals(userIn.userName) && ret.userPassword.Equals(userIn.userPassword) select ret).FirstOrDefault(); 

を、私は、ユーザーを取得しますが、 user.userTypeは常にnullです。

私はここで何が欠けていますか?
別のLINQクエリを作成する必要がありますか?
UserTypeオブジェクトをUserオブジェクトに自動的に含めてはなりませんか?

私はコードファーストプログラミングスタイルは優れた方法論だと思いますが、この問題は私を困惑させています。

ありがとうございました!

答えて

0

Includeメソッドを使用して、ナビゲーションプロパティuserTypeを熱心に読み込むようにEFに指示する必要があります。

User user = (from ret in db.Users.Include(u => u.userType) 
      where ret.userName == userIn.userName 
      && ret.userPassword == userIn.userPassword select ret) 
      .FirstOrDefault(); 

それともEFは遅延読み込みがするようにuserTypeプロパティを仮想します。

public virtual UserType userType { get; set; } 
関連する問題