2012-11-20 106 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