У меня отложенный контекст загрузки базы данных с отключенной загрузкой. Когда я хочу запросить и материализовать некоторые объекты со следующим кодом:
await context.Files.Include(f => f.Owner).Where(f => ids.Contains(f.Id)).ToListAsync();
, я получаю следующее исключение:
The specified navigation requires a navigation source of a type that is
compatible with 'Transient.reference[Library.Client]'.
Parameter name: from
Когда я включаю в запрос другие свойства навигации, но не Владелец , работает просто отлично. То же самое относится к контексту с отложенной загрузкой, где запрос материализует сущности и разрешает свойства навигации, включая владельца .
Это просто проблема со свойством навигации Владелец в контексте отложенной загрузки.
Здесь моя модель настроена:
public class User
{
public int Id { get; set; }
[IdColumn(nameof(Client))]
public int ClientId { get; set; }
[ForeignKey(nameof(ClientId))]
public virtual Client Client { get; set; }
}
public class Client : User
{
// here are the specific client properties listed
}
public class File
{
public int Id { get; set; }
[IdColumn(nameof(Owner))]
public int OwnerId { get; set; }
[ForeignKey(nameof(OwnerId))]
public virtual User Owner { get; set; }
[IdColumn(nameof(Client))]
public int ClientId { get; set; }
[ForeignKey(nameof(ClientId))]
public virtual Client Client { get; set; }
}
public class IdColumnAttribute : ColumnAttribute
{
public const string IdPostFix = "_Id";
public IdColumnAttribute() : base() { }
public IdColumnAttribute(string name) : base(name + IdPostFix) { }
}
Эта проблема возникает не только для Файла, но и для других объектов, связанных с Пользователем.