无法在ASP.NET动态数据中检索ManyToMany字段值

时间:2016-10-10 05:57:42

标签: c# asp.net entity-framework asp.net-dynamic-data

我有两个模型PosTransactionModelPosItemModel,它们建立在 Postgresql 上,通过 EntityFramework6 ,他们将每个模型引用为 ManyToMany 关系。

public class PosTransactionModel
{
    public int Id { get; set; }
    public ICollection<PosItemModel> SaleItems { get; set; }
    ...
    ...
}

public class PosItemModel
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]       
    public int ItemId { get; set; }
    public ICollection<PosTransactionModel> SoldInPosTransactions { get; set; }
}

我可以看到已经成功创建了3个表来维护数据和关系:

enter image description here

在数据库表中填写了一些测试数据,我可以看到PosTransactionModel及其SaleItems数据可以通过WebAPI接口正确发布,客户端测试http客户端可以获得正确的JSON数据: enter image description here

现在,我正在尝试构建一个管理站点,以便通过ASP.NET动态数据模板管理这些数据,问题是 ManyToMany SaleItems 字段始终对着测试数据清空:< / p>

enter image description here

这是ManyToManyField的默认模板代码:

public partial class ManyToManyField : System.Web.DynamicData.FieldTemplateUserControl
{
    protected override void OnDataBinding(EventArgs e)
    {
        base.OnDataBinding(e);

        object entity;
        ICustomTypeDescriptor rowDescriptor = Row as ICustomTypeDescriptor;
        if (rowDescriptor != null)
        {
            entity = rowDescriptor.GetPropertyOwner(null);
        }
        else
        {
            entity = Row;
        }

        var entityCollection = Column.EntityTypeProperty.GetValue(entity, null);
        var realEntityCollection = entityCollection as RelatedEnd;
        if (realEntityCollection != null && !realEntityCollection.IsLoaded)
        {
            realEntityCollection.Load();
        }

        Repeater1.DataSource = entityCollection;
        Repeater1.DataBind();
    }

    public override Control DataControl
    {
        get
        {
            return Repeater1;
        }
    }

}

通过调试,我可以看到entityCollection始终为空,我错过了什么?

2 个答案:

答案 0 :(得分:0)

不知道什么是 ASP.NET动态数据模板。但是在您的模型中ICollection<T>应该添加virtual前缀,因为您可以通过延迟加载获取这些模型集合(确保Configuration.LazyLoadingEnabled在您的DBContext中不是false)。可能与您的动态数据模板有关。

答案 1 :(得分:0)

我认为问题在于您的数据模型我没有使用带有DD的EF6,因为我遇到了一些问题(在保存更改中运行业务逻辑不适用于EF数据源)除了我能想到的一切是否与您的模型有关,因为M2M字段模板在EF5和EF6数据库优先模式下工作正常。