如何从DB中获取属性对象

时间:2012-11-20 07:44:51

标签: database image object model asp.net-mvc-4

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

1 个答案:

答案 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);