为博客文章实施分配几个标签

时间:2013-08-10 21:40:47

标签: asp.net-mvc-3 entity-framework

我打算让用户为博客帖子分配几个标签(就像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,等等等等等等!那么为了能够为帖子分配几个标签应该如何改变我的模型呢?

1 个答案:

答案 0 :(得分:0)

听起来你想要与你的PostsTags建立多人:多人关系,因为Post可以有很多Tags和一个{{1 }}将应用于许多Tag

这意味着您至少希望在Posts对象上存储关联的Tags的集合。或者,您可能还希望在Post对象上存储关联的Posts的集合。

因此,将单个Tag更改为集合:

Tag

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

如果您已有现有数据库,则可能必须执行一些显式映射,例如

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