Asp.net mvc4和实体框架,显示名称,而不是显示两个相关表的ID

问题描述:

我有两个表,类别Asp.net mvc4和实体框架,显示名称,而不是显示两个相关表的ID

 
-------------    -------------- 
| book |    | Category | 
-------------    -------------- 
|Id   |    | Id   | 
|CategoryId |    | CategoryName| 
|Title  |    --------------- 
|Description| 
------------ 

我使用实体框架,从数据库中获取数据并返回以查看是这样的:

控制器

using (var db = new BookEntities()){ 
    return View(db.Book.ToList()) 
} 

我可以在书表,但我不显示所有数据不知道如何显示类别名称而不是显示CategoryId。

我是新来的Asp.net mvc4和实体框架。

请帮帮我。 感谢

+0

如果模型配置好,你应该在图书类别属性,那么你可以访问相关类别的任何属性为每本书像这样'book.Category.CategoryName' – JOBG 2013-02-21 04:13:21

在书的模型定义,你可以定义表示相关的类别记录,像这样的对象:

public virtual Category Category{ get; set; } 

确保的CategoryId配置为FK。然后,您可以使用Book.Category.CategoryName

+0

我觉得我已经做到了,但它仍然显示CategoryId,也许我错过了一些部分。 你能否给我举个例子。 感谢您的帮助。 – sspn 2013-02-21 04:35:40

+0

您可以发布您的Book模型和您的类别模型的代码吗? – 2013-02-21 04:37:33

抓住类别名称您是否先从数据库表开始,然后让EF创建您的模型?如果是这样,那么两个表之间的数据库中不能有外键关系。

否则这应该很好地工作作为自己的看法:

@using NamespaceOfBookModel 
@model IList<Book> 
@foreach (var book in Model) 
{ 
    @book.Title 
    @book.Category.CategoryName 
} 

首先创建一个视图模型

public class BookViewModel 
{ 
    public int id; 
    public int Title; 
    public int Description; 
    public Category Category; 
} 

public class Category 
{ 
    public int CategoryId; 
    public string CategoryName; 
} 

在您的LINQ查询试试这个;

public List<BookViewModel> GetList() 
{ 
    var books = db.Book 
       .select(b=> new BookViewModel() 
       { 
        id = b.id, 
        Title = b.Title, 
        Description = b.Description, 
        Category = b.Category 
       }); 
     return books.ToList<BookViewModel>(); 
} 

现在,在您看来,在页面的顶部作为;

@model IEnumerable<BookViewModel> 

然后你可以像访问它;

@foreach(var item in Model) 
{ 
    <h1>@item.Category.CategoryName</h1> 
}