0

我要让用户能够为博客文章分配多个标签(就像 stackoverflow 对标签和问题所做的那样),这是我的帖子模型

 public class Post
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Body { get; set; }
        public string Summary { get; set; }
        public DateTime CreationDate { get; set; }
        public string UrlSlug { get; set; }
        public string Picture { get; set; }
        public int TagId { get; set; }
        public virtual Tag Tag { get; set; }
    }

这是标签

public class Tag
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime CreationDate { get; set; }
        public string TagSlug { get; set; }

    }

当我想创建一个帖子时,我只需在下拉列表中获取所有标签的列表,然后在帖子操作中获取它的 ID,等等等等!因此,为了可以为帖子分配多个标签,应该如何更改我的模型?

4

1 回答 1

0

听起来您想与您的Postsand建立 Many:Many 关系Tags,因为 aPost可以有 many Tags,而 aTag将应用于 many Posts

这意味着您至少要TagsPost对象上存储关联的集合。或者,您可能还希望PostsTag对象上存储关联的集合。

因此,将您的单曲更改Tag为收藏:

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public string Summary { get; set; }
    public DateTime CreationDate { get; set; }
    public string UrlSlug { get; set; }
    public string Picture { get; set; }

    // Navigation property
    public virtual ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreationDate { get; set; }
    public string TagSlug { get; set; }

    // Navigation property (optional)
    public virtual ICollection<Post> Posts { get; set; }
}

如果您正在进行代码优先开发,Entity Framework 应该能够使用默认约定/映射来整理您的数据库结构和表。

如果您已经有一个现有的数据库,您可能需要执行一些显式映射,例如

 modelBuilder.Entity<Post>()
                .HasMany(t => t.Tags)
                .WithMany(p => p.Posts)
                .Map(m => m.MapLeftKey("PostId")
                           .MapRightKey("TagId")
                           .ToTable("PostTags"));
于 2013-08-10T22:22:46.697 回答