0

我有一个CustomProductProperty模型,它允许用户为其产品拥有自定义字段,其中包含一个CustomDataType模型,该模型链接到处理用户定义的 DataTypes 的数据库。

[Table("Product")]
public class Product
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ProductID { get; set; }
    public int ProductTypeID { get; set; }
    [Display(Name = "Product Name")]
    public string ProductName { get; set; }
    [ForeignKey("ProductTypeID")]
    [Display(Name = "Product Type")]
    public virtual ProductType ProductType { get; set; }
    public virtual ICollection<CustomProductProperty> CustomProperties { get; set; } 
}

[Table("CustomProductProperty")]
public class CustomProductProperty
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CustomPropertyID { get; set; }

    public int CustomDataTypeID { get; set; }
    [ForeignKey("CustomDataTypeID")]
    public virtual CustomDataType DataType { get; set; }

    public int ProductID { get; set; }
    [ForeignKey("ProductID")]
    public virtual Product Product { get; set; }

    public string PropertyValue { get; set; }
}

[Table("CustomDataType")]
public class CustomDataType
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CustomTypeID { get; set; }
    public string PropertyName { get; set; }
    public CustomDataTypes DataType { get; set; }
    public int ModuleID { get; set; }
    [ForeignKey("ModuleID")]
    public Module Module { get; set; }
}

当试图在我的视图中显示它时,我创建了一个显示模板来处理CustomProductProperty的ICollection<>出于 某种原因,它是空的,但仍然返回正确的数据,有人知道为什么是空的吗?DataType.PropertyNamePropertyValuePropertyName

@model IEnumerable<InventoryManager.Models.CustomProductProperty>
@{
    Layout = null;
}
@foreach (var item in Model)
{
<tr>
    <th>@Html.DisplayFor(model => item.DataType.PropertyName)</th>
    <td>@Html.DisplayFor(model => item.PropertyValue)</td>
</tr>    
}
4

2 回答 2

1

您应该添加一些代码来显示如何将此模型传递给视图,但我猜它是由延迟加载引起的。您有DataType未在控制器中评估的虚拟属性,因此它不是从数据库中加载的...使用IncludeLINQ 查询中的方法进行预加载

于 2013-06-18T06:50:03.897 回答
0

确保DataType在模型传递给视图之前加载属性(如果它是延迟加载的,则可能不是这种情况)。

你在使用 ORM 吗?您可能需要先加入它 - 如果您提供有关您使用的提供程序类型的更多详细信息,我们应该能够提供示例代码。

于 2013-06-18T06:52:28.557 回答