2013-10-24 3 views
0

Когда я начинаю мой MVC приложения, эта ошибка возникает УПП «EntityType„HttpPostedFile“не имеет ключа, определенный»EntityType «HttpPostedFile» не имеет ключа, определенного

Может кто-то пожалуйста, скажите мне, что случилось здесь?

Модель:

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, который не имеет определенных ключей.

Я искал некоторые ответы, и все говорит, что я должен добавить [Ключ] к Модели, и у меня есть, так что происходит здесь?

Я использую Visual Studio Express 2013 для Интернета со всеми версиями латтетов MVC и EF.

/Thanks

Это работает, хотя!

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; } 
} 

ответ

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; } 
} 
+0

Спасибо! Просто попробовал это, и он работает! Пила в другом месте здесь, в SO, чтобы использовать HttpPostedFileBase, это возможно! [SO Post here] (http://stackoverflow.com/questions/8777623/how-to-upload-image-to-sql-with-mvc3-within-one-form-using-ado-net) –

+0

Не уверен, но я лично все равно не будут использовать эти типы напрямую. – Lloyd

+0

Пробовал HttpPostedFileBase, там не повезло. Поэтому я собираюсь с байтом [], имеет больше смысла, для меня! Благодаря!! –

0

Ваш ORM (probaly EF здесь) считает, что HttpPostedFile является объектом из базы данных, и что ImageData Навигационное свойство.

Когда вы получаете HttpPostedFile или HttpPostedFileBase в контроллере, вы должны получить его содержимое в виде byte[], а затем передать его в Advert сущности. Вот пример: http://msdn.microsoft.com/en-us/library/system.web.httppostedfile.inputstream(v=vs.110).aspx

Смежные вопросы