【发布时间】:2011-06-03 02:53:44
【问题描述】:
我正在构建一个仅使用 Entity Framework 4 CTP 5 POCO 的个人博客应用,其中 Post 可以有许多 Tags 和一个 Tag 可以出现在许多帖子中。我的问题是是否构建一个多对多模型,或者有一个查找表。
起初我尝试使用多对多,但我不知道如何插入,每次发布新帖子(选择了许多标签),我不知道该怎么做标签应该与帖子相关联(如果标签名称已经存在,则不会插入新标签。)
然后我尝试像这样构建一个查找表:
发帖
public class Post
{
public int Id { get; set; }
[Required]
[StringLength(512, ErrorMessage = "Title can't exceed 512 characters")]
public string Title { get; set; }
[Required]
[AllowHtml]
public string Content { get; set; }
public string FriendlyUrl { get; set; }
public DateTime PostedDate { get; set; }
public bool IsActive { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<PostTagLookup> PostTagLookups { get; set; }
}
标签
public class Tag
{
public int Id { get; set; }
[Required]
[StringLength(25, ErrorMessage = "Tag name can't exceed 25 characters.")]
public string Name { get; set; }
public string FriendlyName { get; set; }
public virtual ICollection<PostTagLookup> PostTagLookups { get; set; }
}
PostTagsLookup
public class PostTagLookup
{
public int PostId { get; set; }
public int TagId { get; set; }
}
问题是我不确定 EF 将如何处理查找表(当我选择标签时,我将如何获取帖子的标签或帖子的集合)。使用下面的代码,我收到一条错误消息,提示 PostTagLookup 没有 Id 键:
var getPosts = _post.GetLatestPosts(3).ToList();
var posts = from post in getPosts
select new PostModel
{
Id = post.Id,
Title = post.Title,
Content = post.Content,
FriendlyUrl = post.FriendlyUrl,
PostedDate = post.PostedDate,
IsActive = post.IsActive,
NumberOfComments = post.Comments.Count(),
PostTags = post.PostTagLookups.Where(p => p.PostId == post.Id).ToList()
};
关于如何完成这项任务的任何建议?非常感谢!
【问题讨论】:
标签: asp.net-mvc entity-framework-4 many-to-many entity-relationship lookup