2017-02-22 18 views
0

私はthisに従っています。私の質問は次のとおりです。 投稿テーブルとタグテーブルの間にジョインテーブルがある場合は、 Post私はPostクラスとTagクラスのPostTagsプロパティを処理する必要がありますか?それは正しいアプローチですか?UWPとSQLite:多対多関係の操作方法

これは私が話していたコードです:

public class Post 
{ 
    public int PostId { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 

    public List<PostTag> PostTags { get; set; } 
} 

public class Tag 
{ 
    public string TagId { get; set; } 

    public List<PostTag> PostTags { get; set; } 
} 

public class PostTag 
{ 
    public int PostId { get; set; } 
    public Post Post { get; set; } 

    public string TagId { get; set; } 
    public Tag Tag { get; set; } 
} 

答えて

0

私はポストへのタグのリストを追加したい時はいつでも、私はポストからPostTagsプロパティとタグのクラスで動作するはず?

あなたはabove documentで多対多の関係の部品のサンプルコードを使用している場合は、その答えはイエスです。 PostTagテーブルにレコードを追加するには、PostエンティティのPostTagsプロパティで作業できる必要があります。

あなたはPostは、新たに次のコードを使用して作成されたとしてもPostTagsのリストを追加したい場合は:あなたが存在していたPostTagsのリストを追加したい場合は

using (var db = new MyContext()) 
{ 
    var posttag = new PostTag { TagId = txttagjoinId.Text }; 
    Post newone = new Post() 
    { 
     Content = "new content", 
     Title = "new title" 
    }; 
    newone.PostTags = new List<PostTag>() { posttag };  
    db.Posts.Add(newone);     
    db.SaveChanges(); 
} 

を最初に投稿を取得してPostTagsプロパティを更新することがあります。次のコードは、最初のPostレコードにTagsリストを追加:あなたはMyContextクラスにpublic DbSet<PostTag> PostTags { get; set; }を追加した場合、あなたはPostTagsプロパティを必要としないことがあり

using (var db = new MyContext()) 
{ 
    var posttag = new PostTag { TagId = txttagjoinId.Text }; 
    List<Post> allposts = db.Posts.ToList(); 
    allposts[0].PostTags = new List<PostTag>() { posttag }; 
    db.Posts.Update(allposts[0]); 
    db.SaveChanges(); 
} 

たが、以下のように、あなたはPostTagテーブルにレコードを追加することができるはずです推奨されなくてもよい。

using (var db = new MyContext()) 
{ 
    var posttag = new PostTag { TagId = txttagjoinId.Text, PostId = 1 }; 
    db.PostTags.Add(posttag); 
    db.SaveChanges(); 
} 

有料注意がテーブルPostTagsはあなたがレコードを追加または更新するときに、制約を満たす必要があることを外国キーPostIdTagIdで作成されました。 enter image description here