Платформа сущностей один ко многим - пустая виртуальная коллекция - PullRequest
0 голосов
/ 23 января 2019

У меня есть этот код первой базы данных

public partial class SystemWarning
{

    [Key]
    public long Id { get; set; }

    /// <summary>
    /// id of the admin that created the entry
    /// </summary>
    public string CreatedById { get; set; }

    public virtual AspNetUser CreatedBy { get; set; }

    public string AcknowledgedById { get; set; }

    public virtual AspNetUser AcknowledgedBy { get; set; }

}
public partial class AspNetUser
{
    public AspNetUser()
    {
        SystemWarnings = new HashSet<SystemWarning>();
    }

    [Key]
    public string Id { get; set; }

    public virtual ICollection<SystemWarning> SystemWarnings { get; set; }

}

И связаны вместе следующим образом

        modelBuilder.Entity<AspNetUser>()
            .HasMany(e => e.SystemWarnings)
            .WithOptional(e => e.CreatedBy)
            .HasForeignKey(e => e.CreatedById).WillCascadeOnDelete(false);

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

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

@ edit: вот другой объект для сравнения:

    public partial class UserProfile: BaseObject
{

    public Guid Id { get; set; }

    public string OwnerId { get; set; }

    public virtual AspNetUser Owner { get; set; }

}

and the mapping

            modelBuilder.Entity<AspNetUser>()
            .HasMany(e => e.OwnedUserProfiles)
            .WithOptional(x => x.Owner)
            .HasForeignKey(x => x.OwnerId);

Мне кажется, то же самое, за исключением того, что SystemWarning имеет длинный Id с идентификационными данными (забыл опубликовать это раньше - это определено следующим образом)

modelBuilder.Entity<SystemWarning>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

И что на самом деле SystemWarning имеет еще одну ссылку на AspNetUser, которую я сейчас добавил (AcknowledgedBy (Id)), которая связана следующим образом

            modelBuilder.Entity<AspNetUser>()
            .HasMany(e => e.SystemWarnings)
            .WithOptional(e => e.AcknowledgedBy)
            .HasForeignKey(e => e.AcknowledgedById).WillCascadeOnDelete(false);

Я скоро опубликую трассировку SQL ...

1 Ответ

0 голосов
/ 24 января 2019

Что ж, с этим редактированием все получилось ... обе ссылки из SystemWarning на AspNetUser сопоставлены с коллекцией SystemWarnings ... неудивительно, что это не работает так, как должно.

Обратите внимание: сопоставьте каждую 1: n другой коллекции, иначе возникнут проблемы.

...