微风中的多对多关系

Tin*_*ing 8 many-to-many entity-framework breeze

我正在使用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; }
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,团队和用户之间存在多对多的关系.我想让它工作几个小时.我总是在VS 2012中收到错误消息"bad nav properties"的JS Exception.起初我认为是用户/团队级别的ICollections团队/用户,但它不是.问题似乎是两个电话1)和2).我删除其中任何一个它的工作原理.重命名一个并保持两个字段都处于活动状态仍会引发错误.也许任何人都知道发生了什么.

非常感谢

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

Tin*_*ing 14

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

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

团队 - TeamUser(1对多)

用户 - TeamUser(1对多)

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

  • 我建议人们避免多对多的实现.这个概念很好,但在实践中它几乎总是分崩离析.根据我的经验,映射表最终会获得一列.也许这是一个链接日期或userId或其他描述双方如何走到一起的事实.在我添加"有效载荷"的那一刻,多对多分崩离析,我必须使映射/链接实体显式化.我必须争先恐后地追踪所有依赖于m-to-m代码的代码,这些代码很难找到.我一直希望我首先让它们成为1到m +的映射实体. (7认同)
  • 还是什么呢? (3认同)
  • 依然没有 ? (3认同)