2016-04-21 68 views
2

我试图显示来自两个表与外键联接的数据。 我的模型:如何显示来自两个表的数据首先代码EF ASP.NET MVC 5

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

    [Display(Name = "Client name")] 
    public string ClientName { get; set; } 

    public string UserId { get; set; } 

    [ForeignKey("UserId")] 
    public virtual ApplicationUser User { get; set; } 
} 

public class ApplicationUser : IdentityUser 
{ 
    [Key] 
    public override string Id { get; set; } 

    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 

    // FK 
    public virtual ICollection<Deal> Deals { get; set; } 
} 

我的控制器:

// GET: Deal 
public ActionResult Index() 
{ 
    return View(db.Deals); 
} 

我怎样才能在查看一些像这样显示:

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.NazwaKlienta) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.User.Nazwisko)!!! 
    </td> 
</tr>} 

我总是得到错误Invalid column name 'Discriminator'. @Html.DisplayFor(modelItem => item.User.Nazwisko)

+4

使用视图(视图模型)所需的属性创建一个新类并从两个表中读取数据并分配此类的属性。使您的视图强烈键入这个视图模型。 SO中有很多例子。 – Shyju

+2

Google _无效的列名称'Discriminator'._,您会发现很多可能的解决方案。 –

回答

0

如果您有一个包含两个表的属性的ViewModel,则可以将实体的值分配给viewmodel的属性并最终显示它。

例如:

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

    [Display(Name = "Client name")] 
    public string ClientName { get; set; } 

    public string UserId { get; set; } 

    [ForeignKey("UserId")] 
    public virtual ApplicationUser User { get; set; } 
} 

public class ApplicationUser : IdentityUser 
{ 
    [Key] 
    public override string Id { get; set; } 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 

    public virtual ICollection<Deal> Deals { get; set; } 
} 

public class ViewModelTest 
{ 
    public int DealId { get; set; } 
    public string ClientName { get; set; } 
    public string UserId { get; set; } 

    public string ApplicationUserId { get; set; } 
    public string FirstName { get; set; } 
} 

如果你写一些代码,将分配实体值到视图模型的属性,您可以显示使用视图模型的两个实体。