4

私はEntityFrameworkの初心者でCommentあり、関連するFKオブジェクトを持つオブジェクトUserをデータベースに挿入する必要があります。

    public Class Comment
    {
        public int CommentID { get; set; }
        public string CommentContent { get; set; }
        public virtual User User { get; set; }
        public virtual DateTime CommentCreationTime { get; set; }
    }

public class User
{      

    public int UserID { get; set; }
    public string UserName { get; set; }
    public string UserPassword { get; set; }

    public string UserImageUrl{get; set;}
    public DateTime UserCreationDate { get; set; }

    public virtual List<Comment> Comments { get; set; }
}

  public void AddComment()
  {
        User user = new User() { UserID = 1 };            
        Comment comment = new Comment() { CommentContent = "This is a comment", CommentCreationTime = DateTime.Now, User = user };

        var ctx = new WallContext();
        comments = new CommentsRepository(ctx);

        comments.AddComment(comment);
        ctx.SaveChanges();
   }

User理想的には、T-SQLを使用して、オブジェクトのPRIMARY KEYがわかっている場合は、オブジェクトを挿入Commentし、挿入ステートメントで「ユーザー」のPKを指定できます。

Entity Frameworkで同じことをしようとしましたが、機能しないようです。User新しい「コメント」を挿入するためだけに、 最初にデータベースからオブジェクトをフェッチする必要があるのはやり過ぎでしょう。

どうすればこれを達成できますか?

4

1 に答える 1

10

コンテキストが既存のエンティティを認識できるように、ユーザーオブジェクトをコンテキストにアタッチする必要があります

  public void AddComment()
  {
       var ctx = new WallContext();

        User user = new User() { UserID = 1 };  

        ctx.Users.Attach(user);

        Comment comment = new Comment() { CommentContent = "This is a comment", CommentCreationTime = DateTime.Now, User = user };

        comments = new CommentsRepository(ctx);

        comments.AddComment(comment);
        ctx.SaveChanges();
   }
于 2012-09-27T09:13:04.173 に答える