我没有成功地阅读和解决如何正确构建简单的MVC Web应用程序的想法。有很多教程,但每个教程都很糟糕,我的意思是它们展示了如何将简单类型字段添加到ApplicationUser
并在AccountViewModel
和ManageViewModel
中使用它们。我需要的是使用自定义对象,而不是简单的字段。
我做了一个简单的测试解决方案。我尝试实现一对一(UserProfile - Address)关系。
这是我的 ApplicationUser.cs 类:
namespace DBRelationsTesting.Models
{
// Add profile data for application users by adding properties to the ApplicationUser class
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual AddressViewModel Address { get; set; }
public virtual ICollection<PhotoGalleryViewModel> PhotoGallery { get; set; }
}
}
AddresViewModel 类:
namespace DBRelationsTesting.Models.AccountViewModels
{
public class AddressViewModel
{
[Key]
public int AddressId { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
}
因此,我创建了数据库类AddressViewModel
,更新了视图,添加了DbSets
并修改了控制器。
我得到的只是数据库中充满了外键数据,但我无法在Views中显示外键字段。 从我读到的这是用户身份验证的一些安全限制。这是真的吗?
在一个单独的测试项目中,我尝试使用相同但不在用户身份验证类中,并且在Controller中使用Include()
函数后它可以工作(在Details操作的示例中)。它填补了外国的领域。
// GET: UserProfiles/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var userProfile = await _context.UserProfile
.Include(usrProfile => usrProfile.Address)
.SingleOrDefaultAsync(m => m.UserProfileID == id);
if (userProfile == null)
{
return NotFound();
}
return View(userProfile);
}
为什么在ManageController
(在使用身份验证的项目中)无法使用Include()
?
在这种情况下,如何将自定义类与用户身份验证系统相关联,以便登录用户不会看到其他用户数据?
我应该在我的自定义UserProfile
类中添加内置的User对象,如下所示?它会起作用吗?
public virtual User User { get; set; }