ASP.NET MVC深层模型关系? MVC5

时间:2014-10-08 13:15:13

标签: asp.net asp.net-mvc model asp.net-mvc-5 entity-relationship

学术范例:简单标记机制 - asp.net / MVC5

型号:

// post
public class Post
{
    public Int64 Id { get; set; }
    public string Title { get; set; }
    public virtual IList<TagMap> TagMaps { get; set; } 
}

// tag
public class Tag
{
    public Int64 Id { get; set; }
    public string Name { get; set; }
    public virtual Post Post { get; set; }
}

// tagmap
public class TagMap
{
    public Int64 Id { get; set; }
    public virtual Post Post { get; set; }
    public virtual Tag Tag { get; set; }
}

TagTable包含单个标记词(无重复项)。 TagMap表示Post和(很多)标签之间的关系。

我认为这个简单的设计应该有效吗?但我不知道如何设置视图以进行编辑和创建标记(而不是标记图)。

任何帮助都会很好。

2 个答案:

答案 0 :(得分:1)

您似乎正在实现一对多的关系。 (一个帖子,很多标签)..

你可以拥有它..

public class Post
{
    [Key]
    public Int64 PostId { get; set; }
    public string Title { get; set; }
}

public class Tag
{
    [Key]
    public Int64 TagId { get; set; }
    public string Name { get; set; }
}

public class TagMap
{
    public Int64 PostId { get; set; }
    public Int64 TagId { get; set; }

    [ForiegnKey("PostId")]
    public virtual Post Post { get; set; }
    [ForiegnKey("TagId")]
    public virtual Tag Tag { get; set; }
}

请注意,您不需要在两个表上进行延迟加载,因为您实际上已将其引用到tagmap表。

答案 1 :(得分:0)

好的听起来不错。

我将模型更改为:

public class Post
{
    [Key]
    public Int64 Id { get; set; }
    public string Title { get; set; }
    public IList<TagMap> TagMaps { get; set; }
}

在postscontroller的索引方法中:

var posts = db.Posts.Include(m => m.TagMaps.Select(n => n.Tag));

观点:

@for (int i = 0; i < item.TagMaps.Count; i++)
 {
   @Html.Raw(item.TagMaps[i].Tag.Name);
 }   

这就像魅力一样。