Здравствуйте, моя задача состоит в том, что я вытягиваю путь изображения из БД и отображаю его на странице, само изображение храниться в файловой системе. Вот моя модель
1: 0..1 public class Album
{
public string Title { get; set; }
public virtual Genre Genre { get; set; }
public virtual ICollection<FileDetail> FileDetails { get; set; }
[Key]
public int AlbumId { get; set; }
[DisplayName("Genre")]
public int GenreId { get; set; }
[DisplayName("Artist")]
public int ArtistId { get; set; }
public decimal Price { get; set; }
[DisplayName("Album Art URL")]
[StringLength(1024)]
public string AlbumArtUrl { get; set; }
public virtual Artist Artist { get; set; }
public virtual MainFileDetails MainFileDetails { get; set; }
}
}
public class MainFileDetails
{
public Guid Id { get; set; }
public string FileName { get; set; }
public string Extension { get; set; }
[Key, ForeignKey("Album")]
public int AlbumId { get; set; }
public virtual Album Album { get; set; }
}
}
И вот метод Edit в котором мы можем загрузить новое фото :
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "AlbumId,Title,GenreId,ArtistId,Price,AlbumArtUrl")] Album album)
{
if (ModelState.IsValid)
{
//New Files
for (int i = 0; i < Request.Files.Count; i++)
{
var file = Request.Files[i];
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
MainFileDetails fileDetail = new MainFileDetails()
{
FileName = fileName,
Extension = Path.GetExtension(fileName),
Id = Guid.NewGuid(),
AlbumId = album.AlbumId
};
var path = Path.Combine(Server.MapPath("~/Upload/"), fileDetail.Id + fileDetail.Extension);
file.SaveAs(path);
db.Entry(fileDetail).State = EntityState.Modified;
}
}
db.Entry(album).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", album.GenreId);
ViewBag.AlbumId = new SelectList(db.MainFileDetails, "AlbumId", "FileName", album.AlbumId);
return View(album);
}
Но есть проблема, дело в том что когда я делал эту связь
1: 0..1 то данные в таблице Albums уже существовали, и вот если например перейти на страницу Edit, с товаром, Id которого не существует в связующей таблице MainFileDetails, то нам не позволяет программа перейти на страницу Edit, так ка выкидывает exception во вьюшке: "object reference not set to an instance of an object", вот тут:
<img src="~/Upload/@(Model.MainFileDetails.Id + Model.MainFileDetails.Extension)" width="240" height="240" />
Если же создавать новый товар, тогда новая запись с ID привяжется к таблице MainFileDetailsи excepption'а не будет. И что тогда делать с уже существующими данными? Мне приходиться вручную в таблице MainFileDetails добавлять данные, чтобы исключений не было, ну ладно у меня записей пару , а если бы было миллион? Что делать в такой ситуации? Спасибо