Я создаю приложение для личного блога только с 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; }
}
Тег
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; }
}
Поиск тегов записей
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()
};
Любое предложение о том, как выполнить эту задачу? Большое тебе спасибо!