Я пытаюсь сохранить класс Photo
, который имеет поле byte[] File
. При попытке сохранить его с помощью контекста выбрасывается ошибкаСохранение байт-массива Возвращает нулевое значение
Ссылка на объект не установлена в экземпляр объекта.
Но при отладке я вижу, что это не null. Я могу увидеть все свойства класса, включая значения в массиве байтов.
public class PhotoRepository
{
private static BlogContext _ctx;
public PhotoRepository()
{
_ctx = new BlogContext();
}
public static void Save(Photo p)
{
_ctx.Photos.Add(p);
_ctx.SaveChanges();
}
}
Контроллер
public class PhotoController : Controller
{
public ActionResult Index()
{
using (var ctx = new BlogContext())
{
return View(ctx.Photos.AsEnumerable());
}
}
public ActionResult Upload()
{
return View(new Photo());
}
[HttpPost]
public ActionResult Upload(PhotoViewModel model)
{
var photo = new Photo();//Mapper.Map<PhotoViewModel, Photo>(model);
if (ModelState.IsValid)
{
photo.AlternateText = model.AlternateText;
photo.Description = model.Description;
photo.File = MapStreamToFile(model.File);
photo.Name = model.Name;
PhotoRepository.Save(photo);
return RedirectToAction("Index");
}
return View(photo);
}
public byte[] MapStreamToFile(HttpPostedFileBase file)
{
using (var stream = file.InputStream)
{
var memoryStream = stream as MemoryStream;
if (memoryStream == null)
{
memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
}
return memoryStream.ToArray();
}
}
}
фотография
public class Photo
{
public int Id { get; set; }
public Byte[] File { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string AlternateText { get; set; }
}
PhotoViewModel
public class PhotoViewModel
{
public int Id { get; set; }
public HttpPostedFileBase File { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string AlternateText { get; set; }
}
* Точно, что * возвращает 'null' или вызывает исключение NullReferenceException? Меньше кода и больше стека, пожалуйста. –
Вы понимаете, что каждый раз, когда вы создаете новый экземпляр «PhotoRepository», вы повторно инициализируете это * статическое поле, верно? Это похоже на ошибку и смущает дизайн для меня –
его не байтовый массив. Вы пытаетесь использовать ссылочную переменную, значение которой равно null. – MMK