【问题标题】:Many-to-many relations in BreezeBreeze 中的多对多关系
【发布时间】:2012-11-29 23:13:57
【问题描述】:

我正在使用 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; }
    }

如您所见,团队和团队之间存在多对多的关系 用户。我试图让它工作几个小时。我总是得到一个 JS VS 2012 中出现错误消息“bad nav properties”的异常。在 首先我以为是 ICollections 团队/用户 用户/团队级,但它不是。问题似乎是两个电话 1) 和 2)。如果我删除其中任何一个,它就可以工作。重命名一个和 保持两个字段都处于活动状态仍然会引发错误。也许有人有 知道发生了什么。

非常感谢

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

【问题讨论】:

    标签: entity-framework many-to-many breeze


    【解决方案1】:

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

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

    团队 -- TeamUser(一对多)

    用户 -- TeamUser(一对多)

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

    【讨论】:

    • 我建议人们避免多对多的实现。这个概念很好,但在实践中它几乎总是分崩离析。根据我的经验,映射表最终会获得一列。也许它是一个链接日期或一个用户 ID 或其他描述双方如何走到一起的事实。在我添加“有效负载”的那一刻,多对多分崩离析,我必须明确映射/链接实体。我必须争先恐后地追踪所有依赖于 m-to-m 的代码……很难找到的代码。我一直希望我一开始就将它们设为 1 到 m + 映射实体。
    • 如何通过这样的链接实体获取团队中的所有用户?
    • 我正是这样做的(使用了两个一对一的关系),但我仍然收到导航属性无法识别的错误。当我查看微风源代码时,我发现了这条评论:// TODO: Revisit this later - right now we just ignore many-many and assocs with missing constraints. 在这种情况下,关系不是 m-to-m,但它没有约束,所以这可能就是它被忽略的原因。问题是我不确定为什么要忽略没有约束的关联?难道你不能从元数据中推断出这种关系是从每一端的多重性中一对一的关系吗?
    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2011-06-02
    • 2011-02-07
    • 2015-12-30
    • 2020-12-05
    • 2018-09-28
    • 2017-05-22
    • 2013-01-08
    相关资源
    最近更新 更多