基于多对多关系的结果

时间:2013-01-24 23:40:05

标签: c# entity-framework asp.net-mvc-4 many-to-many

我不确定该问题的标题,这是我正在努力解决的问题。

我有两张桌子,他们之间有多对多关系,战斗和战斗机。战斗机可以在许多战斗中,战斗有许多战士(2战士)。这些映射得很好,但我想要做的是在Fight表中有一个列,我可以在其中设置谁赢得了两个战士之间的战斗。最好的办法是什么?

提前致谢,如果你不明白,我会尝试以更好的方式解释它。

public class Fight
{
    [Key]
    public int FightId { get; set; }

    [Key, ForeignKey("FightCard")]
    public int CardId { get; set; }

    public virtual ICollection<Fighter> Fighters { get; set; }

    }

public class Fighter
{
    [Key]
    public int FighterID { get; set; }

    [Required]
    [DisplayName("First Name")]
    public string FirstName { get; set; }

    [Required]
    [DisplayName("Last Name")]
    public string LastName { get; set; }

    [DisplayName("Nickname")]
    public string NickName { get; set; }

    [Required]
    public string Nationality { get; set; }

    public static String[] WeightClassOptions
    {
        get
        {
            return new String[] { "Heavyweight", "Light Heavyweight", "Middleweight", "Welterweight", "Lightweight", "Featherweight", "Bantamweight", "Flyweight" };
        }
    }

    [DisplayName("Weight Class")]
    public string WeightClass { get; set; }

    public string Height { get; set; }

    [Required]
    [DisplayName("Date of Birth")]
    [DataType(DataType.Date)]
    public DateTime DateOfBirth { get; set; }

    // Fight Record:
    public int Wins { get; set; }
    public int Loss { get; set; }
    public int Draw { get; set; }
    public int NoContest { get; set; }

    public String Picture { get; set; }

    public virtual ICollection<Fight> Fight { get; set; }

3 个答案:

答案 0 :(得分:1)

您可以创建从FightFighter Winner的一对多关系。

答案 1 :(得分:1)

你应该有一个联结表,用于映射战士和战斗表之间的多对多关系。我们称之为联结表FightersFights

FightersFights中,您可以添加一列,指示每次加入是赢还是输的。像这样的东西

| Fighters |         | FightersFights |             | Fights |
------------         ------------------             ----------
| Id       |         | FighterId      |             | Id     |
| Name     | 1     n | FightId        | n         1 | Name   |
|          |---------| Winner         |-------------|        |

答案 2 :(得分:1)

或者您可以在idWinner表中添加Fight,该表是对获胜者的ID的引用,这样可以避免创建另一个表。 您还可以添加一个字段winner,其中包含1或2,具体取决于哪个战斗机赢了,但这个是凌乱的