2012-11-20 75 views
2

我有些疑惑,也许是新手怀疑,但我刚刚进入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)

化身== null,但并不假设是因为当我创建对象承包商,我成功添加了图像(我检查了数据库,它在那里)

我看到的解决方案不是在Contractor.cs模型中具有Image属性,而只是将一个字符串属性与图像键相关联。


问题2)

即使可以抓住的图像键就像我在前面说的问题,当我通过我在调试模式下鼠标移到 私人DATACRUD DB =新DATACRUD();

db.Images也是空...


 return File(avatar.File_data, "image"); 
    } 

回答

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); 
+0

嗨,那里,谢谢你的信息,但为什么我应该有一个外国人在图像承包商的关键?我只通过承包商或公司访问图片。但我不需要oposite – user1837862

+0

嘿,我没有在图像中定义一个外国人的关键,但我只是尝试了像在最后一行代码中说的热切的负载,它的工作原理;)非常感谢你 – user1837862

+0

@ user1837862我的道歉,我认为这就是你的模型是如何定义的。 – HTX9