0

MVC アプリを起動すると、「EntityType 'HttpPostedFile' has no key defined」というエラーが表示されます

誰かがここで何が悪いのか教えてもらえますか?

モデル:

public partial class Advert
{
    [Key]
    public int ID { get; set; }

    [Required]
    public HttpPostedFile ImageData { get; set; }

    [Required]
    public string UrlToUse { get; set; }

    [Required]
    public string Author { get; set; }

    [Required]
    public int SchemaType { get; set; }

    public string Title { get; set; }
}

コントローラーがヒットしたら、これを実行します

    public ActionResult DisplayAdvert()
    {
        db.Database.CreateIfNotExists();

        return PartialView("_Advert");
    }

そして、db.Database.CreateIfNotExists(); という行でブームです。失敗します:

Boat_Club.Models.HttpPostedFile: : EntityType 'HttpPostedFile' にはキーが定義されていません。この EntityType のキーを定義します。HttpPostedFiles: EntityType: EntitySet 'HttpPostedFiles' は、キーが定義されていないタイプ 'HttpPostedFile' に基づいています。

いくつかの回答を検索しましたが、[キー] をモデルに追加する必要があるとすべて言われています。

MVC と EF のすべての最新バージョンを使用して、Visual Studio Express 2013 for Web を使用しています。

/ありがとう

これはうまくいきます!!

public partial class Advert
{
    [Key]
    public int ID { get; set; }

    [Required]
    public byte[] ImageData { get; set; }

    [Required]
    public string UrlToUse { get; set; }

    [Required]
    public string Author { get; set; }

    [Required]
    public int SchemaType { get; set; }

    public string Title { get; set; }
}
4

2 に答える 2

0

HttpPostedFileまず、モデルで使用しないでください。どこでもシリアル化することは想定されていません。

代わりに、画像データを として宣言するbyte[]か、さらに詳細が必要な場合はそれらを保持する別のタイプを作成してから、投稿されたファイル インスタンスから必要な詳細を転送します。

例えば:

public partial class Advert
{
    [Key]
    public int ID { get; set; }

    [Required]
    public byte[] ImageData { get; set; }

    [Required]
    public string UrlToUse { get; set; }

    [Required]
    public string Author { get; set; }

    [Required]
    public int SchemaType { get; set; }

    public string Title { get; set; }
}
于 2013-10-24T10:46:11.423 に答える
0

ORM (ここではおそらく EF) は、それHttpPostedFileがデータベースのエンティティでImageDataあり、ナビゲーション プロパティであると考えています。

HttpPostedFileコントローラーでorを取得する場合HttpPostedFileBaseは、そのコンテンツを として取得しbyte[]、それをAdvertエンティティに渡す必要があります。例を次に示します: http://msdn.microsoft.com/en-us/library/system.web.httppostedfile.inputstream(v=vs.110).aspx

于 2013-10-24T10:54:49.910 に答える