C# 基于MVC actionresult(实体框架)更新关系数据库数据

C# 基于MVC actionresult(实体框架)更新关系数据库数据,c#,sql,.net,entity-framework,C#,Sql,.net,Entity Framework,我正在尝试更新数据库中的一个表,以根据用户选择的卡片更改特定关系,然后单击按钮将该卡片发送到该卡片组,请参见以下内容: 我的模型: public class Card { public int Id { get; set; } public string Name { get; set; } public int? Atk { get; set; } public int? Def { get; set; } public string Desc {get

我正在尝试更新数据库中的一个表,以根据用户选择的卡片更改特定关系,然后单击按钮将该卡片发送到该卡片组,请参见以下内容:

我的模型:

public class Card
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? Atk { get; set; }
    public int? Def { get; set; }
    public string Desc {get; set;}
    public int? Level { get; set; }
    public string Type { get; set; }
    public string Attribute { get; set; }
    [DisplayName("Image")]
    public virtual List<Image> Card_Images { get; set; }

    public virtual List<Deck> Deck { get; set; }


}



    public class Deck
    {
        public int id { get; set; }

        public string Name { get; set; }

        public string Notes { get; set; }
        [DisplayName("Card")]
        public virtual List<Card> Card { get; set; }
    }
我的看法是:

@using YGOBuilder.Controllers
@model YGOBuilder.Models.Card

<div>
    <h4>Card</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Name)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Name)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Atk)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Atk)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Def)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Def)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Desc)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Desc)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Level)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Level)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Type)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Type)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Attribute)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Attribute)
        </dd>

        @foreach (var item in Model.Card_Images)
        {

            <td>
                <img src=@item.image_url height="300" width="200" style="margin: 2px">
            </td>

        }


    </dl>
</div>
<p>
    @Html.ActionLink("Back to List", "Index")
</p>
我想在上面的视图中显示所有当前甲板的列表,我需要为此创建一个viewModel吗

此外,当用户查看id为1的卡时,他们希望更新DeckCards表以将该卡与id为3的卡组配对,例如

 Deck_Id     Card_Id
    3            1

我认为你的控制者行动将使牌组中的所有牌都相同。您具有以下功能:

foreach (var c in cardInDb.Deck)
{
    cardInDb.Id = deckInDb.id;
}
相反,请尝试:

deckInDb.Card.Add(cardInDb);
cardInDb.Deck.Add(deckInDb);

除非我误解了您的目标,否则当您调用SaveChanges()时,数据库应该得到相应的更新。

这是关系映射,需要更改,因此在DeckCards中,表Card_Id映射到Deck_Id
foreach (var c in cardInDb.Deck)
{
    cardInDb.Id = deckInDb.id;
}
deckInDb.Card.Add(cardInDb);
cardInDb.Deck.Add(deckInDb);