我有两个模型PosTransactionModel
和PosItemModel
,它们建立在 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个表来维护数据和关系:
在数据库表中填写了一些测试数据,我可以看到PosTransactionModel
及其SaleItems
数据可以通过WebAPI接口正确发布,客户端测试http客户端可以获得正确的JSON数据:
现在,我正在尝试构建一个管理站点,以便通过ASP.NET动态数据模板管理这些数据,问题是 ManyToMany SaleItems 字段始终对着测试数据清空:< / p>
这是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
始终为空,我错过了什么?
答案 0 :(得分:0)
不知道什么是 ASP.NET动态数据模板。但是在您的模型中ICollection<T>
应该添加virtual
前缀,因为您可以通过延迟加载获取这些模型集合(确保Configuration.LazyLoadingEnabled在您的DBContext中不是false)。可能与您的动态数据模板有关。
答案 1 :(得分:0)
我认为问题在于您的数据模型我没有使用带有DD的EF6,因为我遇到了一些问题(在保存更改中运行业务逻辑不适用于EF数据源)除了我能想到的一切是否与您的模型有关,因为M2M字段模板在EF5和EF6数据库优先模式下工作正常。