Есть два таблицы: таблица новостей и таблица картинок. В таблице картинок есть поле NewsId
которое связано с Id
новостей.
Вот модель:
public class RelNewsDto
{
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public virtual ICollection<NewsImageDto> NewsImages { get; set; }
}
public class NewsImageDto
{
public int Id { get; set; }
public byte[] ImageItem { get; set; }
public int NewsId { get; set; }
}
Я не могу разобраться, как добавлять картинки в коллекцию NewsImages
Вот, что происходить во View:
@using (Html.BeginForm("RelNewsCreate", "News", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<h4>Title</h4>
@Html.TextBoxFor(model => model.Title, new { @class = "form-control", required = "required", autocomplete = "off" })
<br />
<h4>Images</h4>
@Html.TextBoxFor(Model => Model.NewsImages, new { type = "file", name = "uploadImage", min = "1", max = "9999", multiple = "true" })
<br />
<h4>Article</h4>
@Html.TextAreaFor(model => model.Body, 20, 0, new { @class = "form-control", required = "required", autocomplete = "off" })
<br />
<input type="submit" value="Save" class="btn btn-success" id="btn-save" />
}
Вот, что происходит в контроллере:
[HttpPost]
public ActionResult RelNewsCreate(BLL.Model.RelNewsViewModelItem item)
{
BLL.Providers.RelNewsBdProvider dbProv = new BLL.Providers.RelNewsBdProvider();
for (var i = 0; i < Request.Files.Count; i++)
{
var image = Request.Files[i];
if (image != null)
{
byte[] imageData = null;
using (var binaryReader = new BinaryReader(image.InputStream))
{
imageData = binaryReader.ReadBytes(image.ContentLength);
item.NewsImages.Add(new BLL.Model.NewsImageViewModelItem { NewsId = item.Id, ImageItem = imageData });
}
}
}
dbProv.Add(item);
return RedirectToAction("RelNews");
}
Business Logic Layer:
public void Add(RelNewsViewModelItem newsItem)
{
dbProv.Add(MapDtoToDb(newsItem));
}
public RelNewsDto MapDtoToDb(RelNewsViewModelItem dbItem)
{
if (dbItem != null)
{
return new RelNewsDto
{
Id = dbItem.Id,
Title = dbItem.Title,
Body = dbItem.Body,
NewsImages = dbItem.NewsImages.Select(MapNewsImageDto).ToList()
};
}
return null;
}
Data Access Layer:
public void Add(RelNewsDto newsItem)
{
using (var db = new DataBaseDataContext())
{
db.NewsVs.InsertOnSubmit(MapDtoToDb(newsItem));
var images = newsItem.NewsImages.Select(x => new NewsImage() { Id = x.Id, ImageItem = x.ImageItem, NewsId = newsItem.Id }).ToList();
db.NewsImages.InsertAllOnSubmit(images);
db.SubmitChanges();
}
}
public NewsV MapDtoToDb (RelNewsDto dbItem)
{
if (dbItem != null)
{
return new NewsV
{
Id = dbItem.Id,
Title = dbItem.Title,
Body = dbItem.Body
};
}
return null;
}
Доходит до последней строчки (db.SubmitChanges();
) и выдает exception:
An exception of type 'System.Data.SqlClient.SqlException' occurred in >System.Data.Linq.dll but was not handled in user code
Additional information: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_NewsImage_NewsV". The conflict occurred in database "Schedule", table "dbo.NewsV", column 'Id'.
Не понимаю, как исправить ошибку.
Ошибки больше нет.
public void Add(RelNewsDto newsItem)
{
using (var db = new DataBaseDataContext())
{
var item = MapDtoToDb(newsItem);
var images = newsItem.NewsImages.Select(MapNewsImage).ToList();
db.NewsVs.InsertOnSubmit(item);
item.NewsImages.AddRange(images);
db.SubmitChanges();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день, нужна ваша помощь в оптимизации кодаЗадача : зашифровать часть байтов в файле алгоритмом aes c# Как я сделал:
У меня есть база логинов, паролей, портов и ip адресовСуть в том, что нужно реализовать отдельный перебор для каждого ip адреса в потоках
При попытке провести авторизацию через запрос к апи - получаю ответ с сервер 401В связи с тем что нужно использовать определенные юзер-агенты,от...