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 を作成したときに画像を正常に追加したため、そうではないと思われます (DB をチェックインしたところ、そこにあります)。

私が見ている解決策は、Contractor.cs モデルで Image プロパティを使用する代わりに、画像キーを使用して文字列プロパティを配置することです。


問題 2)

前の問題で述べたように、イメージ キーを取得できたとしても、プライベート DATACRUD db = new DATACRUD (); を介してデバッグ モードでマウスを渡すと、

db.Imagesも空です...


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

1 に答える 1

0

Imageナビゲーション プロパティを として定義していないため、ロード時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 に答える