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)

avatar == null,但不应该是因为当我创建对象 Contractor 时,我成功添加了图像(我检查了数据库并且它在那里)

我看到的解决方案不是在 Contractor.cs 模型中使用 Image 属性,而是将字符串属性与 image 键放在一起。


问题2)

即使可以像我在上一个问题中所说的那样抓住图像密钥,当我在调试模式下将鼠标传递到 private DATACRUD db = new DATACRUD ();

db.Images 也是空的...


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

1 回答 1

0

因为您尚未将Image导航属性定义为,所以您必须在加载 a 时virtual急切加载:ImageContractor

db.Contractors.Include("Avatar").SingleOrDefault(c => c.ContractorID == id);

或者

// using System.Data.Entity;
db.Contractors.Include(c => c.Avatar).SingleOrDefault(c => c.ContractorID == id);
于 2012-11-22T03:51:59.243 回答