我目前正在使用 Web API 和淘汰赛等构建 SPA。到目前为止,我编写了自己的简单数据上下文,并且效果很好。 我碰上 Breeze ,认为这可能值得一试。特别是我希望获得一种更简单的实体之间导航方法......
使用 Breeze 加载实体或单个实体效果很好。使用导航属性似乎不起作用。导航属性始终为空,即使它是一对多关系。
这是我的模型(简化):
public class WorkdayHours
{
public int Id { get; set; }
public bool IsWorkDay { get; set; }
...
public Byte WeekDay { get; set; }
}
public class Service
{
public int Id { get; set; }
public string DisplayName { get; set; }
public virtual ICollection<WorkdayHours> BookableDays { get; set; }
}
public class Employee
{
public int Id { get; set; }
public string DisplayName { get; set; }
public virtual ICollection<WorkdayHours> BookableDays { get; set; }
}
public class Shop
{
public int Id { get; set; }
public string DisplayName { get; set; }
public virtual ICollection<WorkdayHours> BookableDays { get; set; }
}
然后我按如下方式获取 SPA 中的实体服务:
var query = EntityQuery
.from('Services')
.where('id', 'eq', serviceId)
.expand('BookableDays');
当执行查询时,我得到的结果是所请求的服务实体,其中包含除 bookableDay 属性之外的所有数据,但始终是一个空数组。 当我检查 Json 答案时,我看到 workdayHours 也被传输, Breeze 甚至调用我为该实体定义的 ctors。然而,它们并不链接到 bookableDays 属性本身。
在检查生成的数据库模型时,EF 按预期在 workdayHours 中生成了服务、员工和商店的外键。
Breeze 不能有多个可选的外键吗?
高度赞赏建议和想法。
最佳答案
Breeze 依赖于外键。我有类似的问题。这应该可以解决它: EF 也为我生成了外键,而相关的实体仍然是空的。据我所知, Breeze 需要外键字段的显式注释/配置。
public class Mvl
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long MvlId{ get; set; }
public DateTime CreatedAt { get; set; }
[InverseProperty("Mvl")]
public ICollection<MvlOP> MvlOps { get; set; }
public DateTime? ReleasedAt { get; set; }
public DateTime? LockedAt { get; set; }
public DateTime? ClosedAt { get; set; }
//[ConcurrencyCheck]
//public int? RowVersion { get; set; }
[Timestamp]
public byte[] TimeStamp { get; set; }
}
public class MvlOP
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long MvlOpId { get; set; }
public long MvlId { get; set; }
[ForeignKey("MvlId")]
public Mvl Mvl { get; set; }
...
}
关于entity-framework - Breeze.js 一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248997/