【发布时间】:2023-03-09 03:41:01
【问题描述】:
我有一个网络应用程序可以将图像上传到数据库并检索它们。
public class ImageGallery
{
[Key]
public int ImageID { get; set; }
public int ImageSize { get; set; }
public string FileName { get; set; }
public byte[] ImageData { get; set; }
[Required(ErrorMessage="Please select Image File")]
public HttpPostedFileBase file { get; set; }
}
我的数据库上下文类是这样的
public class MyDatabaseEntities : DbContext
{
public DbSet<ImageGallery> ImageGalleries { get; set; }
}
这是我的控制器
public ActionResult Upload()
{
return View();
}
[HttpPost]
public ActionResult Upload(ImageGallery IG)
{
IG.FileName = IG.File.FileName;
IG.ImageSize = IG.File.ContentLength;
byte[] data = new byte[IG.File.ContentLength];
IG.File.InputStream.Read(data, 0, IG.File.ContentLength);
IG.ImageData = data;
using(MyDatabaseEntities dc = new MyDatabaseEntities())
{
dc.ImageGalleries.Add(IG);
dc.SaveChanges();
}
return RedirectToAction("Gallery");
}
现在当我尝试上传图片时,出现以下错误
EntityType 'HttpPostedFileBase' 没有定义键。定义此 EntityType 的键。 HttpPostedFileBases: EntityType: EntitySet 'HttpPostedFileBases' 基于没有定义键的类型'HttpPostedFileBase'。
我看到堆栈溢出问题之一-----'HttpPostedFileBase' has no key defined. Define the key for this EntityType。我尝试了解决方案,但没有成功。
我为此目的关注此博客------ http://dotnetawesome.com/mvc/how-to-upload-image-to-database-and-show-in-view-without-image-handler
【问题讨论】:
-
您不能在数据库中存储
HttpPostedFileBase。从您的数据模型中删除它并使用包含该属性的视图模型。 -
@StephenMuecke 那么我将不得不进行许多更改。是否可以仅在数据模型和控制器中进行一些更改以使其正常工作
-
您需要在视图中显示/编辑
ImageGallery的任何属性吗?如果不是,那么只需使用public ActionResult Upload(HttpPostedFileBase file)并在视图中使用<input type="file" name="file" />(并从您的数据模型中删除该属性) -
它仍然没有完全意义....如果我删除该属性然后像这样尝试----- public ActionResult Upload(ImageGallery IG, HttpPostedFileBase file) { file.FileName = IG 。文件名;在这里我无法设置文件名和内容长度属性以保存到数据库中。我在这里没有意义。 PLzzz 看代码
-
其他方式:) -
IG.FileName = file.FileName;
标签: c# asp.net-mvc entity-framework ef-code-first