2011-12-17 12 views
1

ViewModelに2つのエンティティのプロパティがあります。 2つのエンティティは、両方とも互いに関連しているため、たとえば、UserとPostです。各ユーザは複数の投稿を持つことができ、多くの投稿は1人のユーザ(1対多)に属することができます。2つの関連するエンティティを持つViewModelで作成

私のViewModelからの狙いは、ユーザーと同じフォーム上のポストの追加を可能にすることです。私はこのような何か持って作成手法に関する私のコントローラで

public class CreateVM 
{ 
    [Required, MaxLength(50)] 
    public string Username { get; set; } 

    [Required, MaxLength(500), MinLength(50)] 
    public string PostBody { get; set; } 

    // etc with some other related properties 
} 

::私はデバッガを通してそれを歩くとき

[HttpPost] 
public ActionResult Create(CreateVM vm) 
{ 
    if (ModelState.IsValid) 
    { 
      User u = new User() 
      { 
       Username = vm.Username, 
       // etc populate properties 
      }; 

      Post p = new Post() 
      { 
       Body = vm.PostBody, 
       // etc populating properties 
      }; 

      p.User = u; // Assigning the new user to the post. 

      XContext.Posts.Add(p); 

      XContext.SaveChanges(); 
    } 
} 

それはすべてが正常に見えるが、しかし、ときに私のViewModelは次のようになります私はポストを表示しようとすると、そのユーザーの関係はnullです!

私も

u.Posts.Add(p); 

UPDATEしようとした:

マイPostクラスのコードを次のとおりです。

public class Post 
{ 
    [Key] 
    public int Id { get; set; } 
    [Required, MaxLength(500)] 
    public string Body { get; set; } 
    public int Likes { get; set; } 
    [Required] 
    public bool isApproved { get; set; } 
    [Required] 
    public DateTime CreatedOn { get; set; } 
    [Required] 
    public User User { get; set; } 
} 

しかし、また、機能しなかったこと。私は間違って何をしていますか?私ははどんな助けを大いに歓迎するでしょう

ありがとうございます。

+0

'Post'クラスコードを表示できますか? – Eranga

+0

更新された投稿を参照してください。ありがとうEranga – Ciwan

答えて

1

UserプロパティをEFが遅延ロードできないという問題は、virtualになっていないためです。

public class Post 
{ 
    [Key] 
    public int Id { get; set; } 
    [Required, MaxLength(500)] 
    public string Body { get; set; } 
    public int Likes { get; set; } 
    [Required] 
    public bool isApproved { get; set; } 
    [Required] 
    public DateTime CreatedOn { get; set; } 
    [Required] 
    public virtual User User { get; set; } 
} 

あなたは、あなたがすべき熱心な負荷のポストに関連UserポストのUserプロパティにアクセスしようとしていることを事前に知っていれば。

context.Posts.Include("User").Where(/* condition*/); 
+0

ありがとうEranga、私は問題があるとは思わなかった。なぜなら、ユーザーはデータベースが作成されているのと同時に作成されているからだ。私はそれをVirtualに変更し、何が起こるかを見てみましょう。返信します。 – Ciwan

+0

**それは働いています** ...ありがとうEranga。 – Ciwan

関連する問題