2014-10-27 88 views
0

我想要一個頁面,用戶從下拉列表中選擇類別,然後添加一個關於該類別的小文本,並上載圖像的路徑,該圖像的路徑保存在數據庫中,而不是整個圖像。我創建了一個表格「Categories」,管理員有權填寫表格,用戶只能從類別列表中進行選擇。如何使用一個模型和一個視圖添加多個表格?

這是我迄今所做的:

的創建類別,型號:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 

namespace DemoIdentity.Models 
{ 
    public class CategoriesAdmin 
    { 
     public int ID { get; set; } 

     [Required(AllowEmptyStrings = false)] 
     [Display(Name = "category name")] 
     public string categoryName { get; set; } 
    } 

    public class DefaultConnection:DbContext 
    { 
     public DbSet<CategoriesAdmin> categories { get; set; } 

    } 
} 

現在,我希望能有另一個表(數據),其中包括(ID,從選擇的類別(類別名稱表類別),新聞,Image_Path)。該表位於默認連接數據庫中。類別名稱是從下拉列表中選擇的類別名稱,圖像路徑是保存路徑而非整個圖像的上傳圖像。

我不確定如何做到這一點。

+0

如果你的數據庫在'MS SQL Server'中,那麼只需使用'Stored Procedure'來保存所需的數據。 – firefalcon 2014-10-27 09:57:23

+0

Im在mvc中使用模型來創建數據庫 – mohammad 2014-10-27 09:58:54

回答

2

看起來你很混淆ASP.NET MVCEntity Framework的組件。

作爲實體框架站點規定:

實體框架(EF)是一個對象關係映射器,它使.NET 開發人員使用特定於域的對象的關係數據的工作。它不需要開發人員通常需要編寫的大部分數據訪問代碼。

和MVC站點指出:

的ASP.NET MVC是 實現模型 - 視圖 - 控制器(MVC)模式的開放源碼的Web應用程序框架。

這兩個框架通過你的模型類相遇。 MVC使用模型類來定義應用程序的數據,邏輯和規則。在實體框架中,您的模型類被映射到數據庫中的表,它處理直接讀取和寫入。

通過創建CategoriesAdmin模型類,揭露它作爲屬性在DbContext類這樣:

public class DefaultConnection:DbContext 
{ 
    public DbSet<CategoriesAdmin> categories { get; set; } 
} 

實體框架將映射了模型類叫做CategoriesAdmins數據庫表。如果該表格尚不存在於數據庫中,它將自動爲您創建。實體框架中的這種方法被稱爲Code First to a new Database

現在既然您已經有了一個存儲可用類別的表格(CategoriesAdmin),您將需要創建第二個模型類別(爲您的示例稱爲Data),其中包含您想要的其他信息位的屬性儲藏。

public class Data 
{ 
     // gets or sets the ID of this Data record. 
     public int ID {get;set;} 

     public string ImagePath {get;set;} 

     // other properties 
     ... 
} 

既然您有兩個模型類,您需要在兩者之間建立關係。在SQL數據庫中,這是通過外鍵實現的。在實體框架中,您可以通過使用Navigational Properties來實現相同。

所以我們更新Data模型類這樣:

public class Data 
{ 
     // gets or sets the ID of this Data record. 
     public int ID {get;set;} 

     public string ImagePath {get;set;} 

     // gets or sets the ID of the related CategoriesAdmin record. 
     public int CategoriesAdminId {get;set;} 

     // gets or sets the related CategoriesAdmin record. Entity Framework will 
     // automatically populate this property with an object for the related 
     // CategoriesAdmin record. 
     [ForeignKey("CategoriesAdminId")] 
     public virtual CategoriesAdmin CategoriesAdmin {get;set;} 

     // other properties 
     ... 
} 

CategoriesAdmin屬性的ForeignKeyAttribute是那裏給實體框架的外鍵列的進一步提示從裝載的導航屬性。

最後才能夠使用新的Data模型類與實體框架,你需要讓你有訪問您的數據的一種手段,另一個屬性添加到您的DbContext類:

public class DefaultConnection:DbContext 
{ 
    public DbSet<CategoriesAdmin> Categories { get; set; } 

    public DbSet<Data> Data { get; set; } 
} 

現在你已經創建了您的模型類並將它們連接到實體框架中,您現在可以在MVC中使用它們。如果您將Data模型加載到視圖中(使用DefaultConnection.Data),則可以通過訪問Data對象上的CategoriesAdmin屬性來訪問相關的CategoriesAdmin記錄。

總之:兩個表格意味着你需要兩個模型。這兩種模型都可以加載到單個視圖中。

腳註:如果我的答案有很大差距,我們抱歉,因爲有很多解釋已經在其他地方解釋過,比我所能做得更好。我已經鏈接的參考文獻應該有希望填補空白。

如果您需要更多幫助,請參閱the tutorials on the ASP.NET MVC website on working with data的全部內容。他們寫得比我簡潔的寫得好得多。我會建議完全遵循它們,並在完成自己的項目之前讓示例工作,以便更好地理解這兩個框架如何工作並互相交互。

相關問題