Мой проект использует EntityFramework 6.2, я не понимаю, почему, когда я использую обнуляемый оператор ? в представлении Razor, он возвращает System.Data.Entity.DynamicProxies.MachineHW_06E2...9BE0?.CpuName
вместо строкового значения
Таким образом, это не работает:
@model MYApp.Models.MachineVM
...
<div class="flex-row">
<em>CPU: </em> @Model.Machine.MachineHW?.CpuName
</div>
Вместо этого, используя этот менее читаемый код, он работает:
<em>CPU: </em>@if (Model.Machine.MachineHW != null){@Model.Machine.MachineHW.CpuName}
или
<em>CPU: </em>@(Model.Machine.MachineHW == null ? "" : Model.Machine.MachineHW.CpuName)
это работает.
Модель (Machine.cs):
public class Machine
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual MachineHW MachineHW { get; set; }
}
Модель (MachineHW.cs):
public class WorkloadMachineHW
{
[ForeignKey("Machine"), Key]
public int MachineId { get; set; }
public string CpuName { get; set; }
public virtual Machine Machine { get; set; }
}
ViewModel (MachineVM)
public class MachineVM
{
public Machine Machine { get; set; }
public bool someParam{ get; set; }
}
Контроллер
public ActionResult doMachine()
{
List<Machine> machinesList = db.Machine.Include(m => m.MachineHW).Where(some filter...).ToList();
MachineVM model = new MachineVM ();
model.Machine = machinesList.firstOrDefault();
model.someParam = true;
return View(model);
}
Почему обнуляемый оператор возвращает DynamicProxies, вместо этого проверяя, является ли объект нулевым, и затем отображает значение, которое он работает?