UWP和SQLite:如何使用多对多关系

时间:2017-02-22 12:57:31

标签: .net database entity-framework sqlite uwp

我关注this,我的问题是: 如果Post和Tag表之间有一个连接表,每当我想在Post中添加一个Tags列表时,我应该使用Post和Tag类的PostTags属性吗?这是正确的方法吗?

这是我正在谈论的代码:

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; }
}

1 个答案:

答案 0 :(得分:0)

  

每当我想在帖子中添加标签列表时,我应该使用Post和Tag类的PostTags属性吗?

如果您使用的是above document中多对多关系部分的示例代码,则答案为。您应该能够使用PostTags实体的Post属性将记录添加到PostTag表。

如果您要将Tags的列表添加到Post以及Post是新创建的,您可以使用以下代码:

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();
}

如果您要向现有Tags添加Post列表,您可以先获得该帖子,然后为其更新PostTags属性。以下代码将Tags列表添加到第一个Post记录中:

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();
}

如果您将public DbSet<PostTag> PostTags { get; set; }添加到MyContext类,则可能不需要PostTags属性,您应该能够将记录添加到PostTag表中,如下所示不推荐:

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

注意使用外键PostTagsPostId创建的表TagId,当您添加或更新记录时,您需要满足约束。 enter image description here