Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework MVC4中的实体框架-包含返回错误结果_Entity Framework_Asp.net Mvc 4_Include - Fatal编程技术网

Entity framework MVC4中的实体框架-包含返回错误结果

Entity framework MVC4中的实体框架-包含返回错误结果,entity-framework,asp.net-mvc-4,include,Entity Framework,Asp.net Mvc 4,Include,我有两张桌子: 产品: ProductID,产品名称 化合物: 组件ID,组件ID,数量 绑定为下一个: 1产品。ProductID-->许多化合物。CompoundID 1产品。ProductID-->许多化合物。ComponentID 产品项可以是化合物、组分或两者 我需要一个视图为每个化合物返回其组件名称和数量 MyController方法: public ActionResult CompoundProduct() { var Compounds = db.Com

我有两张桌子:

产品:
ProductID,产品名称

化合物:

组件ID,组件ID,数量

绑定为下一个:

1产品。ProductID-->许多化合物。CompoundID

1产品。ProductID-->许多化合物。ComponentID

产品项可以是化合物、组分或两者

我需要一个视图为每个化合物返回其组件名称和数量

MyController方法:

public ActionResult CompoundProduct()
    {
        var Compounds = db.Compounds.Include(s => s.Products);
        return View(Compounds.ToList());
    }
MyView代码: @模型IEnumerable

<table>
@foreach (var item in Model) 
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CompoundID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ComponentID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Products.ProductName)
        </td>
    </tr>
}
</table>

@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.CompoundID)
@DisplayFor(modelItem=>item.ComponentID)
@Html.DisplayFor(modelItem=>item.Products.ProductName)
}
使用此方法,我可以获得重复的化合物名称列表,而不是每个化合物的不同组件名称,如下图所示:


有什么帮助吗?

当您从数据库创建模型时,EF应该已经创建了两个与两个外键
componendid
componendid
相关的导航属性
Products
Products1
。您可能使用了属于
ComponentID
的错误导航属性,而不是属于
ComponentID
的导航属性。不要使用
产品
而是尝试在
包含
中使用
产品1

var Compounds = db.Compounds.Include(s => s.Products1);
…并且认为:

@Html.DisplayFor(modelItem => item.Products1.ProductName)

从何处获取复合名称?复合名称和组件名称都来自产品表ProductName字段。您能否显示实体类和映射?您的
复合
实体中是否有两个名为
ProductXXX
的导航属性?显然,从
components
Products
表,您有两个外键(
componendid
componendid
),因此您应该有两个属性。您在
Include
中使用的一个可能与
componendid
相关,但您需要与
componendid
相关的一个。我实际上指的是数据库表,而不是视图。但还有一个问题:你说过
产品1
会产生同样的结果。使用
Products1
进行测试时,您是否在
Include
和视图(
@Html.DisplayFor(modelItem=>item.Products1.ProductName
)中使用了
Products1