我有些疑惑,也许还有新手的怀疑,但我刚刚进入ASP.NET MVC 4 基本上我想知道在模型中抓取对象细节的正确方法。 在这种情况下,图像在承包商内。
型号:
public class Contractor {
[Key]
public int ContractorID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Address { get; set; }
public Image Avatar { get; set; }
}
public class Image {
[Key]
public int ImageID { get; set; }
[Required]
public string File_name { get; set; }
[Required]
public byte[] File_data { get; set; }
}
public class DATACRUD : DbContext {
public DbSet<Contractor> Companies { get; set; }
public DbSet<Image> Images { get; set; }
}
控制器:
private DATACRUD db = new DATACRUD();
public ActionResult GetContractorAvatar(int id)
{
Contractor contractor = db.Contractors.Find(id);
if (contractor == null)
{
return HttpNotFound();
}
Image avatar = contractor.Avatar;
问题1)
avatar == null,但不应该是因为当我创建对象Contractor时,我成功地添加了图像(我在数据库中检查了它就在那里)
我看到的解决方案是在Contractor.cs模型中没有Image属性,我只是将一个字符串属性与图像键放在一起。
问题2)
即使可以抓住图像键,就像我在上一个问题中说的那样,当我在调试模式下通过鼠标时 private DATACRUD db = new DATACRUD();
db.Images也是空的......
return File(avatar.File_data, "image");
}
答案 0 :(得分:0)
由于您尚未将Image
导航属性定义为virtual
,因此在加载Image
时,您必须急切加载Contractor
:
db.Contractors.Include("Avatar").SingleOrDefault(c => c.ContractorID == id);
OR
// using System.Data.Entity;
db.Contractors.Include(c => c.Avatar).SingleOrDefault(c => c.ContractorID == id);