Я создаю приложение для личного блога только с Entity Framework 4 CTP 5 POCO, где сообщение может иметь много тегов и тег * во многих сообщениях . Мой вопрос заключается в том, строить ли модель «многие ко многим» или иметь справочную таблицу.
Сначала я пытался использовать «многие ко многим», но я не знаю, как выполнить вставку, каждый раз, когда публикуется новое сообщение (с выбранными многими тегами), я не уверен, что делать что теги должны быть связаны с постом (и не будут вставлять новый тег, если имя тега уже существует.)
Затем я пытаюсь построить таблицу поиска следующим образом:
Сообщение
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; }
}
Tag
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()
};
Любое предложение о том, как выполнить эту задачу? Большое спасибо!