基于 MVC 操作结果(实体框架)更新关系数据库数据



我正在尝试更新数据库中的表以根据用户选择卡更改特定关系,然后单击按钮将该卡发送到该卡组,如下所示:

我的模型:

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; }
}

我的控制器操作:

public ActionResult AddToDeck(int id)
{
var cardInDb = _context.Cards.Single(c => c.Id == id);
var deckInDb = _context.Decks.Single(d => d.id == id);
foreach (var c in cardInDb.Deck)
{
cardInDb.Id = deckInDb.id;
}

_context.SaveChanges();
return View("Index");
}

我的观点:

@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>

我尝试操作的数据库表如下所示,没有附加任何模型,这是由实体框架为多对多关系创建的:

DeckCards
(key sign) Deck_id
(key sign) Card_id

我想以某种方式在上面的视图中显示所有当前甲板的列表,我需要为此创建一个视图模型吗?

此外,当用户查看 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(( 时,数据库应该会获得适当的更新。

最新更新