[英]ASP.net Core 1.0 Mapping property on ApplicationUser returning null
首先,由于开发人员的跳槽,我采用了一个项目,所以这不仅是我对.net core的首次体验,而且我必须消化一个我没有编写的大型代码库。
我需要知道在哪里解决问题。 我有一个视图,该视图在表中呈现记录列表。
以下是访问的相关类:
[Table("AccountDetails")]
public class AccountDetail
{
public int Id { get; set; }
public ICollection<FileUpload> Files { get; set; }
}
该问题发生在Files
属性中。
[Table("FileUploads")]
public class FileUpload
{
public int Id { get; set; }
public string FileName { get; set; }
public ApplicationUser CreatedBy { get; set; }
public string ContentType { get; set; }
public byte[] Content { get; set; }
}
这是返回此列表的方法:
var files = _form.AccountDetail.Files.Select(q => new FileModel
{
FileName = q.FileName,
FileId = q.Id,
EffectiveDate = q.CreatedOn.ToString("d"),
FormId = _form.Id,
UploadedBy = $"{ q.CreatedBy.FirstName } { q.CreatedBy.LastName }"
}).ToList();
ApplicationUser
扩展了IdentityUser
。 UploadedBy
是映射到ApplicationUser的问题。
使用管理员角色,此操作永远不会失败,并且可以正确映射到ApplicationUser
因此CreatedBy
永远不会为null
。
但是,在不是管理员角色的其他用户帐户下,该用户未创建的任何内容都将返回null,这将触发对象引用错误。
现在,我知道该问题应该得到快速响应,例如,“嘿,显然用户没有正确的权限。”,但是我需要在哪里寻找解决方案的帮助。
在这种情况下, CreatedBy
应该永远不会返回null
。
我不知道这种自动映射在哪里或如何发生。
我在快照中找到了这个:
modelBuilder.Entity("Accounting.Entities.FileUpload", b =>
{
b.HasOne("Accounting.Entities.ApplicationUser", "CreatedBy")
.WithMany()
.HasForeignKey("CreatedById");
});
CreatedById
是实际表中引用AspNetUsers
的列。
如果我一直回到被称为控制器的构造函数:
public FormAccountsController(ApplicationDbContext context,
UserManager<ApplicationUser> userManager,
IMapper mapper,
RoleManager<IdentityRole> roleManager) : base(context, userManager, roleManager, mapper)
{
}
在ApplicationDbContext context
,我看到该特定用户未创建的记录的FileUploads
和CreatedBy为null,但是从现在开始,我不确定在哪里查找。 再一次,如果我使用管理员帐户登录,则CreatedBy
永远不会为null。
感谢@TanvirArjel对原始问题的评论,我得以按照追踪发现问题。 它在表单工厂内的include
逻辑中。
if (user.AccountProfile != null)
{
form = _context.Forms.Include(q => q.AccountingDetail)
.ThenInclude(q => q.Files)
.ThenInclude(q => q.CreatedBy) // This was missing
.Single(q => q.Id == formId);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.