EF Core - одиночный выбор дочерней коллекции, хранящейся в родительской коллекции - PullRequest
0 голосов
/ 06 февраля 2019

Работа с .NET Core 3.0 и EF Core, если это влияет на вещи.

Я пытаюсь определить модель, в которой:

  • Пользователь владеет коллекцией игрушек.
  • У пользователя может быть выбранная в данный момент игрушка.

Я пытаюсь смоделировать это как таковой (BaseModel имеет общие свойства для всех моих сущностей), а AVUser - мой ASP.NET Identity пользовательский класс.

public abstract class BaseModel
{
    public int Id { get; set; }
    public DateTime LastModifiedDate { get; set; }
    public DateTime CreatedDate { get; set; }
    public AVUser CreatedUser { get; set; }
    public AVUser ModifiedUser { get; set; }
}

public class Toy: BaseModel
{
    [MaxLength(80)]
    public string Name { get; set; }

}

public class AVUser : IdentityUser
{
    public string FirstName { get; set; }

    // The currently selected toy for the user.
    public int SelectedToyId { get; set; }
    public Toy SelectedToy { get; set; }

}

Однако в EF Core выдается сообщение об ошибке: невозможно определить отношение, представленное свойством навигации 'AVUser.Toy' типа 'Toy'.

У меня возникли проблемы саннотируйте это так, чтобы он знал, что пользователь может иметь коллекцию игрушек, и я хочу сохранить одну игрушку с пользователем в качестве текущей выбранной.

1 Ответ

0 голосов
/ 06 февраля 2019

Напишите классы вашей модели следующим образом:

public class Toy: BaseModel
{
    [MaxLength(80)]
    public string Name { get; set; }

    [ForeignKey("AVUser")]
    public string UserId { get; set; }

    public AVUser AVUser { get; set; }

}

public class AVUser : IdentityUser
{
    public string FirstName { get; set; }

    // The currently selected toy for the user.
    [ForeignKey("SelectedToy")]
    public int SelectedToyId { get; set; }
    public Toy SelectedToy { get; set; }

    public ICollection<Toy> Toys {get; set;}

}

Затем настройте в OnModelCreating in DbContext следующее:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
 {
      base.OnModelCreating(modelBuilder);

      modelBuilder.Entity<AVUser>().HasOne(a => a.SelectedToy).WithOne();
      modelBuilder.Entity<AVUser>().HasMany(a => a.Toys).WithOne(t => t.AVUser).HasForeignKey(t => t.UserId);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...