8

我正在使用 EF5 Code First 定义我的一些模型 atm。我有这三个具有多对多关系的示例类:

public class Team
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Team_Id { get; set; }
        [MaxLength(150)]
        public string TeamName { get; set; }

        public virtual ICollection<User> Users { get; set; }
        [public virtual ICollection<Role> Roles { get; set; }  // 1

        [Timestamp]
        public byte[] TimeStamp { get; set; }
    }

public class User
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int User_Id { get; set; }
        [MaxLength(150)]
        public string LoginName { get; set; }
        [MaxLength(150)]
        public string Nachname { get; set; }
        [MaxLength(150)]        
        public string Vorname { get; set; }

        public virtual ICollection<Team> Teams { get; set; } 
        public virtual ICollection<Role> Roles { get; set; }   // 2

        [Timestamp]
        public byte[] TimeStamp { get; set; }
    }

public class Role
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Role_Id { get; set; }
        [MaxLength(50)]
        public string RoleName { get; set; }

        [Timestamp]
        public byte[] TimeStamp { get; set; }
    }

如您所见,团队和用户之间存在多对多的关系。我试图让它工作几个小时。我总是在 VS 2012 中收到带有错误消息“错误导航属性”的 JS 异常。起初我以为是用户/团队类中的 ICollections 团队/用户,但事实并非如此。问题似乎是两个调用 1) 和 2)。我删除其中任何一个都可以。重命名一个并保持两个字段都处于活动状态仍然会引发错误。也许有人知道发生了什么。

非常感谢

此问题由 SirSmackalot 在我们的 IdeaBlade 论坛上发布。我在这里重新发布问题和答案,因为我认为它对 Breeze Stack Overflow 社区很有用。

4

1 回答 1

14

Breeze 还不支持隐藏映射表的多对多关系。问题是 Breeze 依赖于“外键”概念来跟踪关系,而这不适用于在实体框架中定义为没有有效负载的多对多关系。

起作用的是将多对多关系更改为与链接实体的两个一对多关系。基本上,只需将映射表公开为另一种实体类型。例如:

团队——TeamUser(一对多)

用户——TeamUser(一对多)

我们确实计划在以后的版本中支持实体框架的官方多对多关系,但我们需要优先考虑这一点。因此,请使用网站上的反馈机制( https://breezejs.uservoice.com/forums/173093-breeze-feature-suggestions/filters/top )添加/投票支持此功能请求。这有助于我们决定接下来要关注哪些功能。

于 2012-11-29T23:13:57.267 回答