2

我目前正在构建一个带有 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 答案时,我看到 workdayHours 也被传输,并且微风甚至调用了我为这个实体定义的 ctors。但是,它们没有链接到 bookableDays 属性本身。

在检查生成的数据库模型时,EF 按预期在工作日为服务、员工和商店生成了外键。

微风不能有几个可选的外键吗?

建议和想法高度赞赏。

4

1 回答 1

3

Breeze 依赖于外键。我有一个类似的问题。这应该可以解决它:EF 也在为我生成 ForeignKeys 并且相关的实体仍然是空的。据我所知,微风需要外键字段的显式注释/配置。

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; }

...
}
于 2013-01-10T00:42:27.123 回答