2011-08-17 41 views
1

我正在從「pro asp.net mvc3」一書中構建sportsstore應用程序。在第9章中,我必須添加圖像上傳功能。我更新了我的域對象「產品」,並將列添加到我的數據庫中。在這些步驟之後,作者steven sanderson建議我們需要更新實體框架概念模型,以便db和我的域對象正確地映射在一起。更新實體框架概念模型

我沒有在我的解決方案中使用sportsstore.edmx文件,因爲我們開始使用本書的POCO對象和源代碼也缺少edmx文件?

由於我通過編輯產品獲取此錯誤上傳圖像?

不允許將數據類型nvarchar(max)隱式轉換爲varbinary。使用CONVERT函數來運行此查詢。

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.Data.SqlClient.SqlException:不允許將數據類型nvarchar(max)隱式轉換爲varbinary。使用CONVERT函數來運行此查詢。

爲我的產品類中定義:

public class Product 
{ 
    [HiddenInput(DisplayValue = false)] 
    public int ProductID { get; set; } 

    [Required(ErrorMessage="Please enter a Product Name")] 
    public string Name { get; set; } 

    [Required(ErrorMessage="Please enter product description")] 
    [DataType(DataType.MultilineText)] 
    public string Description { get; set; } 

    [Required(ErrorMessage="Please enter product price")] 
    [Range(0.01, double.MaxValue,ErrorMessage="Please enter positive price")] 
    public decimal Price { get; set; } 

    [Required(ErrorMessage="Please enter product category")] 
    public string Category { get; set; } 

    public byte[] ImageData { get; set; } 
    [HiddenInput(DisplayValue = false)] 
    public string ImageMimeType { get; set; } 
} 

我的產品表定義爲

enter image description here

+2

您將ImageMimeType聲明爲代碼中的字符串,但它在數據庫中聲明爲二進制字段。 – Oxymoron

回答

3

您可以生成一個文件夾上右鍵單擊EDMX文件(機型爲例) => add => new item => ADO.NET實體數據模型

確實很好奇,在數據庫中,圖像是二進制的,而在第e代碼它是一個字符串。 我GOOGLE了這本書,我看到他們使用VARCHAR(50)爲imageMimeType有

PS:在 '說明' 字段也應該是爲nvarchar(500)

來源:http://books.google.be/books?id=gzfFQrs_qQAC&pg=PA291&lpg=PA291&dq=sportstore+imagedata+mvc3&source=bl&ots=EXAaipp5VM&sig=bsw0_ARgqwYIlN6EbD47UT9yq6Q&hl=nl&ei=74xLTqfhLI7pOZCo8LUI&sa=X&oi=book_result&ct=result&resnum=1&ved=0CB4Q6AEwAA#v=onepage&q&f=false(向上滾動數據庫模型的1頁,或參閱本書中的第290頁)

+0

是的,我已修復該問題 – najam