public virtual async Task <MediaDirectory> GetDirectoryAsync(string id) { MediaDirectory directory = await _db.MediaDirectories.SingleOrDefaultAsync(md => md.OwnerId == id && md.Type == DirectoryType.User); if (directory == null) { MediaDirectory userDirectory = await _db.MediaDirectories.SingleOrDefaultAsync(md => md.Slug == MediaManager.UserDirectorySlug && md.Type == DirectoryType.System); ApplicationUser user = await GetUserByIdAsync(id); if (user == null) { throw new Exception("No user found to add/get directory for."); } directory = new MediaDirectory() { OwnerId = id, Type = DirectoryType.User, ParentId = userDirectory.Id, DisplayName = user.UserName, Slug = user.Id }; _db.Add(directory); await _db.SaveChangesAsync(); } return(directory); }