편집 후 DB에 저장된 barchart를 업데이트해야합니다. 나는 20hrs 정도의 예제를 보았지만 함께 사용했다. 내 클래스MVC4 EF5 비트 맵 이미지 업데이트 - db in save
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();
}
그래서, 나는 막대 그래프를 수정하고 DB에 저장되어있는 TaskImage 이미지를 업데이트 할 수 있습니다.
mybmp를 작성하면 파일이 임시 폴더에 테스트로 기록됩니다.
나는 며칠 동안 TaskImage에 mybmp를 저장하는 방법을 이해하려고 노력 해왔다. 내 혼란의 일부는 과제라고 생각합니다. 예전에는 mybmp = toarry (System.Drawing.Imageing.ImageFormat.Gif)와 같은 작업을 수행했습니다. 나는 그것이 MVC C#에서 작동한다고 생각하지 않는다. 이미지는 실제로 System.Drawing.Image에 있고 그것이 생성되고 수정 될 때 생각합니다.
개요 : MVC4 EF5 코드 우선
- 생성 된 이미지를 memorystream에 저장 ????
- 바이트 배열
에 MemoryStream을 변환 - TaskImage 필드 바이트 []를 참조
- 우리는 변형을 갖도록 .STATE 말해 ....... db.Entry (태스크) .STATE = EntityState.Modified;
- 변경 사항을 저장하고 기존 이미지를 덮어 쓰는 중 .... db.SaveChanges();
나는 이것이 올바른 논리라고 생각한다. 기존 이미지를 수정하지 않고 전체 다시 그리기를 수행하므로 먼저 검색 할 필요가 없습니다. BTW 내가이 작업을 얻은 후에는 편집 된 테이블이 아닌 관련 테이블에 TaskImage를 저장하도록 코드를 변경합니다. 나는 그것이 당신의 대답 구조를 바꿀 것이라고 생각하지 않습니다.
보기를 검색하고 전달하는 많은 예제가 있습니다. 나는 그것을 처리 할 수 있다고 생각한다.
Stumped !! 감사합니다
생각했던 것보다 더 열심히 바이트를하지만, "반환"을 받아 작성하는 방법을 알아낼 수 그것을 EF 테이블의 TaskImage 필드에 추가합니다. – user2887440
원리를 인라인 코드로 변환하는 방법. 그것은 "return"을 가져와 EF 테이블의 TaskImage 필드에 씁니다. line image.Save (ms, System.Drawing.Imaging.ImageFormat.Jpeg)는 ms에 이미지를 저장하는 것 같습니다. ms.ToArray)는 바이트 []로 변환합니다. 이제 TaskImage에 .ToArray()를 "할당"하는 코드가 필요합니다. 그럼 내 db.Entry .... 레코드를 업데이 트됩니다 가정합니다. – user2887440
네, 어떻게 문제가 메모리 스트림에서 db.save 얻을 수 있습니다. Task.TaskImage = ImageFromStream (ms.ToArray())와 같은 것; @phil – user2887440