Как сделать Включить для двух свойств навигации, где оба могут получить одну и ту же ссылку? - PullRequest
0 голосов
/ 30 апреля 2019

Учитывая эти примеры моделей:

public class Equipment : DataModelBase
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Display(Name = "Equipment ID")]
    public Int32 ID
    {
        get => _id;
        set => SetProperty(ref _id, value, () => ID);
    }

    //lots of other properties...

    [ForeignKey("Vendor")]
    [Display(Name = "Vendor ID")]
    public Int32? VendorID
    {
        get => _vendorID;
        set => SetProperty(ref _vendorID, value, () => VendorID);
    }

    [Display(Name = "Vendor")]
    public Supplier Vendor { get; set; }

    [ForeignKey("Manufacturer")]
    [Display(Name = "Manufacturer ID")]
    public Int32? ManufacturerID
    {
        get => _manufacturerID;
        set => SetProperty(ref _manufacturerID, value, () => ManufacturerID);
    }

    [Display(Name = "Manufacturer")]
    public Supplier Manufacturer { get; set; }
}

public class Supplier : DataModelBase
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Display(Name = "Supplier ID")]
    public Int32 ID
    {
        get { return _id; }
        set { SetProperty(ref _id, value, () => ID); }
    }
}

Ожидается, что свойства Vendor и Manufacturer в модели Equipment могут ссылаться на один и тот же Supplier. Проблема в том, что когда в представлении используется сущность Equipment, привязки указывают на одну и ту же сущность, а это означает, что когда мой пользовательский интерфейс выбирает значение для одного, другое свойство также изменяется, поскольку привязка к тому же объекту в памяти.

Они загружаются в модель представления с помощью запроса, такого как:

using (var context = new DbContext())
{
    var eqList = context.Equipment
                        .AsNoTracking()
                        .Include(eq => eq.Vendor)
                        .Include(eq => eq.Manufacturer)
                        .ToList();
}

Мне кажется, EF Core понимает, что две ссылки Supplier одинаковы, и затем создает только один экземпляр и применяет его к обоим свойствам.

Итак, мой вопрос: возможно ли переписать этот запрос таким образом, чтобы заставить EF Core извлечь два уникальных экземпляра ссылки Supplier (по одному для каждого свойства навигации) для Equipment сущность, вместо того, чтобы тянуть одну и ту же за обе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...