无法通过实体freamwork C#asp.net mvc保存文件

时间:2014-11-25 08:57:51

标签: c# asp.net asp.net-mvc entity-framework

我有2个clases产品并提交这样的运气

 public  class Product
{
   public Product()
   {
       Image = new File();
   }
   public int ProductID { get; set; }
   public string Name { get; set; }
   public string Manufacturer { get; set; }
   public decimal SizeH { get; set; }
   public decimal SizeW { get; set; }
   public int Weight { get; set; }
   public string CPU { get; set; }
   public int Storage { get; set; }
   public string OpSys { get; set; }
   public int Price { get; set; }
  public  File Image { get; set; }
}
public  class File
{

   public int FileID { get; set; }
    public string FileType { get; set; }
  public   byte[] FileData { get; set; }
}

保存产品方法是这样的。我调试了它,信息状态良好,所有内容都来自byte [],但是只有这个类文件没有保存,其他一切都保存好了

public void SaveProduct(Product product)
{
    if(product.ProductID==0)
    {
        context.Products.Add(product);
    }
    else
    {
        Product dbentry = context.Products.Find(product.ProductID);
        if (dbentry != null)
        {
             dbentry.Name = product.Name;
             dbentry.Manufacturer = product.Manufacturer;
             dbentry.OpSys = product.OpSys;
             dbentry.Price = product.Price;
             dbentry.SizeH = product.SizeH;
             dbentry.SizeW = product.SizeW;
             dbentry.Storage = product.Storage;
             dbentry.Weight = product.Weight;
             dbentry.Image = product.Image;
        }    
    }
context.SaveChanges();

}

数据库看起来像这样 http://s017.radikal.ru/i423/1411/5f/da9ffc9c233e.png

1 个答案:

答案 0 :(得分:0)

由于EF实现延迟加载的方式,可能正确保存了文件,但是没有正确加载。请尝试以下方法之一:

1)将Product上的Image属性更改为虚拟。这将允许延迟加载正常工作。

public virtual File Image { get; set; }

2)当您查询产品的上下文时,请向EF提供Include提示,以便在加载产品的同时加载Image属性。这种策略称为急切加载。

Product dbentry = context.Products.Include('Image').FirstOrDefault(p => p.ProductID == product.ProductID);