Привет всем, поэтому я пытаюсь создать приложение с использованием asp.net mvc с первой базой данных кода, которая позволяет пользователям создавать запись в блоге с таким количеством изображений, как они хотят. Я в настоящее время пытается иметь путь изображения в одной таблице и заголовок, основной текст в другой таблице вместе с внешним ключом к пути к изображению. Так что я могу создать одно сообщение с несколькими изображениями. Это мой первый раз, используя несколько таблиц, и в настоящее время я получаю сообщение об ошибке, когда он достигает этого контекста строки. SaveChanges(); в методе сохранения, когда я пытаюсь создать сообщение и сохранить его в db. Благодарим вас за помощь в решении этой проблемы.Исправление обновления с использованием нескольких таблиц
Исключение типа «System.Data.Entity.Infrastructure.DbUpdateException» произошло в EntityFramework.dll, но не был обработан в пользовательском коде
Дополнительная информация: Произошла ошибка при обновлении записей. Смотрите внутреннее исключение для деталей
я был в состоянии получить программу на работу, когда я использую одну таблицу, но имел этот вопрос: https://imgur.com/a/lQQ3Q
Вот база данных Диаграмма: http://imgur.com/a/iJZGx
Запрос что я пытался сделать, но не уверен, где использовать в моем коде.
var query = db.PostModel.Where(x => x.PostID == PostId).Select(x => new
{
PostID = x.PostID,
ImageId = x.ImageModel.ImageId,
ImagePath = x.ImageModel.ImagePath,
Heading = x.PostModel.Heading,
PostBody = x.PostModel.PostBody
}).FirstOrDefault();
Моя программа
Вид размещающим сообщения
@model Crud.Models.PostModel
....
@using (Html.BeginForm("Create", "Home", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<form action="" method="post" enctype="multipart/form-data">
@Html.LabelFor(model => model.ImageModel.ImagePath)
<input id="ImagePath" title="Upload a product image" multiple="multiple" type="file" name="files" />
@Html.LabelFor(model => model.Heading)
<input id="Heading" title="Heading" name="Heading" />
@Html.LabelFor(model => model.PostBody)
<input id="PostBody" title="PostBody" name="PostBody" />
<p><input type="submit" value="Create" /></p>
</form>
}
View для отображения Сообщений
@model IEnumerable<Crud.Models.PostModel>
....
@foreach (var item in Model)
{
<div>@Html.DisplayFor(modelItem => item.Heading)</div>
<div>@Html.DisplayFor(modelItem => item.PostBody)</div>
<div><img class="img-thumbnail" width="150" height="150" src="/Img/@item.ImageModel.ImagePath" /></div>
}
Модели
public partial class PostModel
{
[Key]
[HiddenInput(DisplayValue = false)]
public int PostID { get; set; }
public string Heading { get; set; }
public string PostBody { get; set; }
[ForeignKey("ImageModel")]
public int ImageId { get; set; }
public virtual ImageModel ImageModel { get; set; }
}
public class ImageModel
{
[Key]
public int ImageId { get; set; }
public string ImagePath { get; set; }
public string PostID { get; set; }
}
DbContext
public class EFDbContext : DbContext
{
public DbSet<SchoolNewsModel> SchoolNews { get; set; }
public DbSet<PostModel> Posts { get; set; }
public DbSet<ImageModel> Images { get; set; }
}
Контроллер
public ViewResult Display()
{
return View(repository.Posts);
}
public ViewResult Create()
{
return View("Create", new PostModel());
}
[HttpPost]
public ActionResult Create(PostModel Image, IEnumerable<HttpPostedFileBase> files)
{
if (ModelState.IsValid)
{
foreach (var file in files)
{
PostModel post = new PostModel();
if (file.ContentLength > 0)
{
file.SaveAs(HttpContext.Server.MapPath("~/Img/") + file.FileName);
// post.ImagePath = file.FileName;
post.PostBody = post.PostBody;
post.Heading = post.Heading;
}
repository.Save(post);
}
}
return RedirectToAction("display");
}
public ViewResult PublicPostDisplay()
{
return View(repository.Posts);
}
Repository
public IEnumerable<PostModel> Posts
{
get { return context.Posts; }
}
public void Save(PostModel Image)
{
if (Image.PostID == 0)
{
context.Posts.Add(Image);
}
else
{
PostModel dbEntry = context.Posts.Find(Image.PostID);
if (dbEntry != null)
{
dbEntry.ImageModel.ImagePath = Image.ImageModel.ImagePath;
}
}
context.SaveChanges();
}
Не уверен, что я понимаю, что ваши желания достичь. вы хотите сохранить один 'PostModel', который содержит несколько изображений (в этом случае вам нужно отдельная таблица для путей изображения с FK к идентификатору 'PostModel'? –
* и пути изображений, хранящиеся во второй таблице, и дают каждый внешний ключ ImageId *. Очень расплывчато. Не используйте слова. Показать диаграмму db. –
Привет, Стивен, да, сейчас у меня есть одна таблица, и я спрашиваю, как я могу сделать так, чтобы у меня была вторая таблица, в которой хранятся изображения. так что, когда пользователь создает сообщение, он создает сообщение в таблице сообщений вместе с внешним ключом, который соединяет каждое изображение с этим сообщением. Извините, если я плохо объясняю, что раньше я работал с несколькими таблицами. Как вы можете видеть в сообщении, у меня есть вторая таблица, прокомментированная, так как я не уверен, как ее использовать, и я хочу опубликовать, как она работает в настоящее время, чтобы люди могли мне посоветовать об изменениях и способах работы запросов и т. Д., Спасибо за вашу помощь – WellThisIsAkward