Умножьте отношения ядра - PullRequest
       5

Умножьте отношения ядра

0 голосов
/ 26 февраля 2020

Я использую сущность ядра 3. У меня есть 2 класса User и Ticket. User может иметь много Ticket для меня и много Ticket от меня. Ticket должен иметь User -приемник и User -приемник. Я сделал так:

public class User
{
    public int Id { get; set; }
    public string PasswordHash { get; set; }
    public string Email { get; 
    public ICollection<Ticket> TicketsToMe { get; set; }
    public ICollection<Ticket> TicketsFromMe { get; set; }
}

public class Ticket
{
    public int Id { get; set; }
    public string Title { get; set; }

    public int UserToId { get; set; }
    public int UserFromId { get; set; }
    public User UserTo { get; set; }
    public User UserFrom { get; set; }
}

И получил ошибку: Невозможно определить отношение, представленное навигационным свойством 'Ticket.UserTo' типа 'Пользователь'. Либо настройте отношение вручную, либо проигнорируйте это свойство, используя атрибут «[NotMapped]», либо используя «EntityTypeBuilder.Ignore» в «OnModelCreating».

У вас есть какие-либо идеи?:)

1 Ответ

2 голосов
/ 26 февраля 2020

Вы можете использовать один из этих

1 - Метаданные. вы можете использовать InverseProperty для определения отношений.

если вы используете метаданные, вы должны установить UserToId и UserFromId на Nullable

public class User
{
    public int Id { get; set; }
    public string PasswordHash { get; set; }
    public string Email { get; set; }
    [InverseProperty("UserTo")]
    public ICollection<Ticket> TicketsToMe { get; set; }
    [InverseProperty("UserFrom")]
    public ICollection<Ticket> TicketsFromMe { get; set; }
}

2 - FluentApi

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
        .HasMany(a => a.TicketsFromMe)
        .WithOne(a => a.UserFrom)
        .HasForeignKey(a => a.UserFromId).OnDelete(DeleteBehavior.Restrict); 
    modelBuilder.Entity<User>()
        .HasMany(a => a.TicketsToMe)
        .WithOne(a => a.UserTo)
        .HasForeignKey(a => a.UserToId).OnDelete(DeleteBehavior.Restrict); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...