У меня есть этот код первой базы данных
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 ...