【问题标题】:ASP.NET MVC 4, EF5, Store additional data in many to many junction tableASP.NET MVC 4,EF5,在多对多联结表中存储附加数据
【发布时间】:2013-06-11 20:41:23
【问题描述】:

我有一个 Code First MVC 4 Web 应用程序 - 地点之间存在多对多关系:

public virtual int PlaceID { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<User> Followers { get; set; }

和用户:

public virtual int UserID { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Place> Places { get; set; }

用户可以“关注”很多地方,这些地方可以有很多关注者。

我想存储有关关系的其他信息 - 比如说评级。因此,用户可以对他们关注的每个地方进行评分,例如,介于 1 到 10 之间。

我该如何实现 - 包括 CRUD 操作(代码优先,实体框架 5)。

谢谢。

【问题讨论】:

    标签: asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5 code-first


    【解决方案1】:

    您需要用两个一对多关系将多对多替换为具有如下定义的 rating 属性的中间类(您可能需要添加导航属性):

    创建一个中间类

    public class UserPlaceRelationship {
      public virtual int PlaceID { get; set; }
      public virtual int UserID { get; set; }
      public virtual Place Place { get; set; }
      public virtual User User { get; set; }
      public virtual int Rating { get; set; }
    }
    

    更新你的位置类:

    public virtual int PlaceID { get; set; }
    public virtual string Name { get; set; }
    public virtual ICollection<UserPlaceReationship> UserRelationships { get; set; }
    

    和你的用户类:

    public virtual int UserID { get; set; }
    public virtual string Name { get; set; }
    public virtual ICollection<UserPlaceReationship> PlaceRelationships { get; set; }
    

    查询会有点棘手,因为您现在必须浏览中间类。

    【讨论】:

    • 谢谢。也许我可以保留多对多的原样,并创建一个单独的结构来记录额外的数据?那会是一个好方法吗?我喜欢现有关系的方便和简单(例如,使用 Place.Followers.Count 来获取所有关注者的总数)。如果不是,我将如何使用此设置进行查询?
    • 否 - 正确答案(对于 3NF)是两个一对多。如果您想知道某个地方的关注者总数,您仍然可以计算关系(因为每个地方每个人都会有一个关系),因此 Place.UserRelationships.Count 仍然会给您关注者的数量
    • 谢谢 - 所以澄清一下,这会更棘手吗?例如?
    【解决方案2】:

    您必须创建一个联结表并向其添加额外信息。

    到目前为止,还没有办法创建具有相关视图的 CRUD 主从控制器。

    你应该按照我提供给this你的问题的答案...

    【讨论】:

    • 抱歉,我暂时不得不离开这个项目。几周后我会重新处理这些问题 - 目前我无法接受任何答案,但肯定会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多