entity-framework - Breeze.js 一对多

标签 entity-framework breeze

我目前正在使用 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/

相关文章:

c# - 向现有的多对多关系添加附加列 - EF Code First

c# - Entity Framework 验证外部实体未被修改

Breeze 0.73.3 保存后无法正确发布 hasChanges

javascript - 我怎样才能轻松地等待元数据?

entity-framework - 两个具有相同名称和选择类型的过程,但 EF 提示数据读取器不兼容

c# - 'object' 不包含 'LoginID' 的定义。 c# 中的问题而不是 vb 中的问题

c# - 如何向绑定(bind)到实体的组合框添加新项目?

BreezeJS 和执行 Entity Framework 存储过程

javascript - 如果字段状态发生更改,则动态添加值

entity-framework - Breeze 和具有导航属性的实体数据模型抛出错误