学术范例:简单标记机制 - 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和(很多)标签之间的关系。
我认为这个简单的设计应该有效吗?但我不知道如何设置视图以进行编辑和创建标记(而不是标记图)。
任何帮助都会很好。
答案 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);
}
这就像魅力一样。