В исходном посте я предположил (и предположил, что неправильно), что поле User
в ForumPost
заполняется автоматически , получая IdentityUser
из таблицы Users с помощью внешнего ключа назначен на ForumPost
. Это оказалось не так, и мне действительно не нужны полные данные пользователя, только имя пользователя.
Поэтому я изменил свой код ForumPost
на этот:
public class ForumPost
{
[Key]
public int PostId { get; set; }
[Required]
[MaxLength(32)]
public string PostName { get; set; }
[Required]
public string PostBody { get; set; }
[Required]
[ForeignKey("User")]
public string UserId { get; set; }
public IdentityUser User { get; set; }
}
Я добавил туда UserId
, чтобы следующее действие Index
могло иметь к нему доступ. Это не изменит базу данных, поскольку база данных уже имеет внешний ключ User Id, указывающий на таблицу Users. Вот новое действие Index
:
public async Task<IActionResult> Index()
{
var posts = await _context.Posts.ToListAsync();
var postList = new List<PostIndexModel>();
foreach (var p in posts)
{
var userName = (from u in _context.Users
where u.Id.Equals(p.UserId)
select u.UserName).SingleOrDefault();
var post = new PostIndexModel()
{
PostId = p.PostId,
PostName = p.PostName,
UserName = userName
};
postList.Add(post);
}
return View(postList);
}
Я также создал новую модель представления PostIndexModel
, которая показывает только несколько вещей:
public class PostIndexModel
{
public int PostId { get; set; }
[Display(Name = "Post Name")]
public string PostName { get; set; }
[Display(Name = "Post Creator")]
public string UserName { get; set; }
}