Entity Framework несколько отношений / переходов к типу объекта - PullRequest
2 голосов
/ 14 апреля 2019

Я хочу создать эту схему базы данных в ASP.NET Core:

Я уже пробовал это с этим кодом без успеха.

Пользователь

public class User : IdentityUser 
{
    public override string Id { get; set; }
    public virtual UserVisitors Visitors { get; set; }
}

UserVisitors

public class UserVisitors 
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public string UserVisitorId { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime VisitTime { get; set; }

    [ForeignKey("UserId")]
    public virtual User User { get; set; }

    [ForeignKey("UserVisitorId")]
    public virtual User UserVisitor { get; set; }
}

Я получаю эту ошибку при миграциях:

Невозможно выполнитьопределить отношение, представленное свойством навигации> «User.Visitors» типа «UserVisitors».Либо вручную настройте отношение>, либо игнорируйте это свойство с помощью атрибута «[NotMapped]», либо> с помощью «EntityTypeBuilder.Ignore» в «OnModelCreating».

Я надеюсь, что кто-то может мне помочь.Заранее спасибо.

Обновление:

Изменено UserVisitors на:

public class UserVisitors 
{
    public int Id { get; set; }
    [InverseProperty("User")]
    public string UserId { get; set; }

    [InverseProperty("User")]
    public string UserVisitorId { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime VisitTime { get; set; }

    public virtual User User { get; set; }
}

Я могу скомпилировать его сейчас, но в базе данных это неправильно.Изображение базы данных:

Столбец UserVisitorId не имеет отношения к User.UserID.

1 Ответ

0 голосов
/ 14 апреля 2019
public class User : IdentityUser 
{

    public override string Id { get; set; }

    public virtual ICollection<UserVisitor> UserVisitors { get; set; }
    public virtual ICollection<UserVisitor> UserVisitors2 { get; set; }
}

public class UserVisitor 
{

    public int Id { get; set; }

    [InverseProperty("User")]
    public string UserId { get; set; }

    public virtual User User {get; set;}
    public virtual User UserVisitor  {get; set;}

    [InverseProperty("User")]
    public string UserVisitorId { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime VisitTime { get; set; }

    public virtual User User { get; set; }
  }

Затем вам нужно сделать правильные отображения, используя OnModelCreatig следующим образом:

modelBuilder.Entity<UserVisitor>()
    .HasOne(x => x.UserVisitor)
    .WithMany(x => x.UserVisitors)

modelBuilder.Entity<UserVisitor>()
    .HasOne(x => x.User)
    .WithMany(x => x.UserVisitors2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...