След редакция трябва да актуализирам лентова диаграма, съхранена в db. Имам около 20 часа за разглеждане на примери, но просто ги сглобих. Моят клас
public class Task
{
public int TaskID { get; set; }
public DateTime? SStart { get; set; }
public DateTime? SEnd { get; set; }
public DateTime? SCert { get; set; }
public byte? Taskimage { get; set; }
}
Моят контролер:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Task task)
{
if (ModelState.IsValid)
{ db.Entry(task).State = EntityState.Modified;
db.SaveChanges();
// now create a new graph using the returned viewbag data
var Mytopleft = 0;
var Mytext = "";
Bitmap mybmp = new Bitmap(400, 20);
Graphics g = Graphics.FromImage(mybmp);
g.DrawRectangle(Pens.Black, 0, 0, 400, 20);
SolidBrush b = new SolidBrush(Color.OldLace);
g.FillRectangle(b, 0, 0, 400, 20);
// draw comma-delimited elements in multiple colors
string[] chunks = Mytext.Split(',');
var brush = new SolidBrush(Color.Black);
SolidBrush[] brushes = new SolidBrush[]
{ new SolidBrush(Color.OldLace), //removed 3 other brushes for clarity
};
int c = 0;
var tasks = db.Tasks.Include(t => t.Builder).Include(t => t.Lot);
foreach (var titem in tasks.ToList())
{
if (titem.SStart == null)
{ c = 0; }
else if (titem.SStart != null && titem.SEnd == null)
{ c = 1; } //removed 3 other cases for clarity
// create a new rectangle displaced by offset and with color
g.FillRectangle(brushes[c], Mytopleft, 0, 10, 20);
Mytopleft += 10;
}
//write to folder as a test this works Gif is arbitrary.
//can't use c:\\lot1.bmp -- can't write to root dir
mybmp.Save("C:\\temp\\lot1.gif", System.Drawing.Imaging.ImageFormat.Gif);
MemoryStream ms = new MemoryStream();
mybmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
db.SaveChanges();
}
Така че след промяна на дата, променям лентовата диаграма и актуализирам изображението на TaskImage, съхранено в db.
Създаването на mybmp работи и записва файл във временната папка като тест.
От дни се опитвам да разбера как да запазя mybmp в TaskImage. Мисля, че част от моето объркване е присвояването, в старите ми дни бих направил нещо като mybmp= toarry(System.Drawing.Imageing.ImageFormat.Gif). Не мисля, че това работи в MVC C#. Мисля, че изображението всъщност е в System.Drawing.Image, докато се създава и модифицира.
И така в общи линии: първо кодът MVC4 EF5
- запишете създаденото изображение в поток от памет????
- конвертирайте потока от памет в масив от байтове
- препратете байта[] към полето TaskImage
- кажете .Посочете, че имаме модификация....... db.Entry(task).State = EntityState.Modified;
- запазване на промените..презаписване на съществуващо изображение.... db.SaveChanges();
Мисля, че това е правилната логика. Правя пълно преначертаване, вместо да модифицирам съществуващото изображение, така че не е необходимо първо да го извличам. Между другото, след като накарам това да работи, ще променя кода, за да съхранява TaskImage в свързана таблица, а не в редактираната таблица тук. Не мисля, че това ще промени структурата на вашия отговор.
Има много примери за извличане и преминаване към преглед. Мисля, че мога да се справя с това.
Стъписан!! Благодаря