В настоящее время я работаю с Entity Framework Core и веб-приложением Net Core 2.1, узнавая, как указывать, подписан ли пользователь на указанные новости или нет.
Я провел день, пытаясь понять, как для этого случая используйте метод запроса Linq:
У меня есть 3 таблицы (пользователи, новости и подписки)
1.1. В таблице Subscriptions
должен быть сохранен идентификатор новостей, который подписан пользователем (рядом с идентификатором пользователя)
Предполагается, что когда пользователь подписывается, он может получать уведомления от новостей, в противном случае нет.
Моя проблема возникает, когда я пытаюсь проверить, подписан ли пользователь на указанные новости. Мне также нужно вернуть новости, на которые подписан человек (я в основном не могу правильно запросить). Я попробовал с Include()
методом, но я чувствую, что что-то упустил.
Это мой код:
DataContext:
public class DataContext : IdentityDbContext<User, Role, string>
{
public DbSet<News> News { get; set; }
public DbSet<Subscription> Subscriptions { get; set; }
public DataContext(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Subscription>(s =>
{
s.HasKey(x => new
{
x.UserId,
x.NewsId
});
});
}
}
Сущность пользователя:
public class User : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Subscription> Subscriptions { get; set; }
}
News
Сущность:
public class News
{
public string Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public ICollection<Subscription> Subscriptions { get; set; }
}
Объект подписки:
public class Subscription
{
public string UserId { get; set; }
public string NewsId { get; set; }
public News News { get; set; }
public User User { get; set; }
}
NewsModel
модель, используемая в представлении (UserModel содержит те же основные свойства, что и пользователь):
public class NewsModel
{
public string Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public UserModel UserCreate { get; set; }
}