Я новичок в EF и CodeFirst и у меня есть следующие (упрощенные) модели:
public class Comment
{
public int ID {get; set;}
public int SourceType {get; set;}
public int SourceID {get; set;}
public string Name {get; set;}
public string Text {get; set;}
}
public class Photo
{
public int ID {get; set;}
public virtual ICollection<Comment> Comments {get; set;}
}
public class BlogPost
{
public int ID {get; set;}
public virtual ICollection<Comment> Comments {get; set;}
}
И в моей реальной базе данных у меня только три таблицы.
Моя цель - создать таблицу «Комментарии», в которой будут храниться комментарии пользователей к фотографиям и сообщениям в блогах. Поле Comment.SourceType
должно различать комментарий к фотографии (SourceType == 1) или запись в блоге (SourceType == 2), а в поле Comment.SourceID
указывается идентификатор источника.
Photo photo = DbContext.Photos.Find(15); //some photo with ID 15
BlogPost blog = DbContext.BlogPost.Find(15); //some blog post, also with ID 15
Comment photoComment = new Comment();
photoComment.SourceType = 1; //photo
photoComment.SourceID = photo.ID;
photoComment.Name = "John";
photoComment.Text = "This is a very nice picture!";
Comment blogComment = new Comment();
blogComment.SourceType = 2; //blog post
blogComment.SourceID = blog.ID;
blogComment.Name = "Peter";
blogComment.Text = "An interesting blog post!";
DbContext.Comments.Add(photoComment);
DbContext.Comments.Add(blogComment);
DbContext.SaveChanges();
//...
Photo photoFromBefore = DbContext.Photos.Find(15);
foreach(Comment comment in photoFromBefore.Comments)
Console.Write(comment.Name+"("+comment.SourceType+", "+comment.SourceID+"); ");
//Output will be: "John(1, 15); Peter(2, 15);"
//Desired output should be instead just "John(1, 15);"
//because Peter's comment actually belongs to blog post with
//the same ID but different "SourceType"-identifier in my database table.
Надеюсь, понятно, чего я пытаюсь достичь. По сути, я не хочу иметь несколько таблиц photo_comments
, blogpost_comments
и т. Д. Для всего, что можно прокомментировать на моем сайте.
Можно ли как-то сказать EF загружать только комментарии с SourceType==1
(для фотографий)? Есть ли какой-то тип «ограничения» или «ограничения», которые я могу использовать для достижения этой цели?