C# 加载一对多模型

C# 加载一对多模型,c#,asp.net,.net,asp.net-mvc,entity-framework,C#,Asp.net,.net,Asp.net Mvc,Entity Framework,我有这样的型号: public partial class Goods { public decimal good_id { get; set; } public string good_name { get; set; } public virtual ICollection<Description> description { get; set; } } public partial class Description { public deci

我有这样的型号:

public partial class Goods
{
    public decimal good_id { get; set; }
    public string good_name { get; set; }
    public virtual ICollection<Description> description { get; set; }
}

public partial class Description
{
    public decimal des_id { get; set; }
    public decimal des_good_id { get; set; }
    public string des_name { get; set; }
    public string des_value { get; set; }
    public virtual Goods goods { get; set; }
}
public ActionResult Index()
{
    var parts = _db.Goods.Include(p => p.Details);
    return View(parts.ToList());
}
@foreach (var part in Model)
{
    <div class="well">
        <div class="row">
            <div class="col-xs-10">
                <h3>
                    <strong>@part.good_name</strong>
                </h3>
                <h4>
                    <strong>@part.Description</strong>
                </h4>
            </div>
        </div>
    </div>
}
这东西坏了:

public partial class Goods
{
    public decimal good_id { get; set; }
    public string good_name { get; set; }
    public virtual ICollection<Description> description { get; set; }
}

public partial class Description
{
    public decimal des_id { get; set; }
    public decimal des_good_id { get; set; }
    public string des_name { get; set; }
    public string des_value { get; set; }
    public virtual Goods goods { get; set; }
}
public ActionResult Index()
{
    var parts = _db.Goods.Include(p => p.Details);
    return View(parts.ToList());
}
@foreach (var part in Model)
{
    <div class="well">
        <div class="row">
            <div class="col-xs-10">
                <h3>
                    <strong>@part.good_name</strong>
                </h3>
                <h4>
                    <strong>@part.Description</strong>
                </h4>
            </div>
        </div>
    </div>
}
@foreach(模型中的变量部分)
{
@part.好名字
@part.Description
}

如果您使用的是实体框架,它将自动为每个商品加载相关描述。你不必为此专门做任何事情。您只需在控制器->操作中首先使用
goodsInstance.Description
创建数据并将其传递给模型:

public ActionResult SampleAction()
{
    using(var context = new YourContext())
    {
        return View(context.Goods.Include("description").First()); // for example    
    }          
}
之后,必须在视图中定义模型,并将其放在视图的第一行:

@model Goods
那么你就拥有了你所需要的一切: 只需渲染您的数据:

<table>
    <tr>
        <td colspan="2">
            @Model.good_name 
        </td>
    </tr>
@foreach (descp in @Model.description.ToList())
{
    <tr>
        <td>
            @desc.des_name
        </td>
        <td>
            @desc.des_value
        </td>
    </tr>
}
</table>

@好名字
@foreach(在@Model.description.ToList()中描述)
{
@描述名称
@描述des_值
}

我可以理解您的问题,您有一个模型,并且您的模型中有一个列表,您希望使用该列表检索数据

这是您的控制器代码

其中“id”是您的数据将被查找的基础上的id

这是您使用razor引擎的视图代码

@import YourApplicationName.Model.Goods
@foreach(var部分在@Model.Description中)
{
@part.des_name
@part.des_值
}
希望这是你的答案


您的问题是关于从数据库检索数据,但您没有显示检索此数据的代码。你能加上那个代码吗?这将是找到问题的关键。请检查我在主帖子中的编辑。我试过你说的,但没用。我做错了什么?您正在直接尝试打印集合的描述属性。您必须循环访问由“Description”表示的集合。但是无法请求进入@Model.Description,因为视图是强类型的。您应该能够循环访问其他答案中所示的描述。这很好,谢谢!但现在我有一个问题-如何不仅加载.First()?我正在尝试…但什么都没有。更改context.Goods.Include(“description”).First()到context.Goods.Include(“description”).ToList(),您将获得所有数据并将@model Goods更改为@model List等等。实际上,我在@model List之后被绊倒了,不知道下一步该怎么办。我使用字段public List goods{get;set;}创建了另一个模型,但这没有帮助。之后,在@model中有一个goods列表,您可以对其进行迭代@foreach(var g in@Model){…}在cshtml中,但这只适用于商品。现在在html中我可以这样做:@foreach(var good in@Model){@good.good_name}。你能,请,向我解释一下,如何以这种方式获得细节?