我目前正在建立一个带有Web API和淘汰赛等的SPA。到目前为止,我已经将自己的简单数据文本转换为非常好的。 我碰到了微风,并认为这可能值得一试。特别是我希望在实体之间进行更简单的导航...
用微风加载实体或单个实体工作正常。使用导航属性似乎不起作用。导航属性始终为空,即使它是一对多关系。
这是我的模型(简化):
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的答案时,我发现工作日的传输也很轻松,而且微风甚至会调用我为这些实体定义的ctors。但是它们没有链接到bookableDays属性本身。
在检查生成的数据库模型时,EF会按照预期在工作日为服务,员工和商店生成外键。
微风不能拥有几个可选的外键吗?
建议与想法高度相关。
答案 0 :(得分:3)
Breeze依赖于外键。我遇到了类似的问题。这应该解决它: EF也为我生成了ForeignKeys以及相关的Entites仍然是空的。据我所知,breeze需要显式注释/配置ForeignKey字段。
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; }
...
}