Во-первых, я принял проект из-за прыжка с корабля разработчиков, так что это не только мой первый опыт работы с ядром .net, но я должен переварить большую кодовую базу, которую я не писал.
Мне нужно знать, где искать решение проблемы. У меня есть представление, которое отображает в таблице список записей.
Вот соответствующие классы, к которым обращались:
[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
никогда не будет нулевым.