Во-первых, соглашение для EF будет искать FK с использованием ClassName_Id, поэтому, если вы FK для пользователя называется User_Id, то это покрыто. Вы можете назвать свое свойство User «User», а не «User_Id», что, я думаю, может сбить с толку, поскольку оно подразумевает «Id» пользователя, а не пользователя.
public class SMAccount
{
[Key]
public int Id { get; set; }
public User User { get; set; }
public string Type { get; set; }
public string AId { get; set; }
}
Затем при получении Учетной записи с ее Пользователем, используйте .Include()
, чтобы сообщить EF о необходимости загрузить соответствующие права.
var smAcc = db.SMAccounts.Include(x => x.User).FirstOrDefault(x => x.User.Id.Equals(userID));
Я не рекомендую делать это с точки зрения Razor. Вместо этого сделайте вызов контроллеру, чтобы получить простой объект C #, который можно заполнить из сущностей. Позже вы, вероятно, столкнетесь с проблемами с циклическими двунаправленными ссылками, которые сериализатор не будет выполнять итерацию или исключение. Кроме того, передавая объекты, вы отправляете клиенту гораздо больше данных, чем обычно требуется, что предоставляет пользователям больше подробностей о ваших данных, чем вы можете отобразить на экране. Просто выбирая данные, которые нужно отобразить, вы минимизируете размер полезной нагрузки по проводам, скрываете конфиденциальные данные от отладчиков на стороне клиента и можете оптимизировать производительность запросов.