이 코드는 이전에 저에게 도움이되었지만이 오류를 일으키는 원인이 무엇인지 잘 모릅니다. 내 유일한 추측은 플레이어를 만들려고 할 때 팀 데이터가 팀 테이블로 되돌려 보내지고 TeamId가 고유하므로이 오류 때문에 복제하려고하는 것입니다.원인 INSERT 문이 FOREIGN KEY 제약 조건과 충돌 했습니까?
오류
외래 키 제약 "FK_dbo.Players_dbo.Teams_TeamId"와 충돌 INSERT 문. 데이터베이스 "Web", 테이블 "dbo.Teams", 열 'TeamId'에서 충돌이 발생했습니다. 그 진술서는 만료되었습니다.
플레이어
public class Player
{
...
...
[HiddenInput(DisplayValue = false)]
[ForeignKey("Team")]
public int TeamId { get; set; }
public virtual Team Team { get; set; }
...
}
팀
public class Team
{
[Key]
[HiddenInput(DisplayValue = false)]
public int TeamId { get; set; }
....
public virtual ICollection<Player> Players { get; set; }
}
컨트롤러
//
// GET: /Player/
[HttpGet]
public ActionResult Create()
{
PopulateTeamsDropDownList();
return View();
}
//
// POST: /Player/
[HttpPost]
public ActionResult Create(Player model)
{
if (ModelState.IsValid)
{
using (var db = new EfDb())
{
var userProfile = db.UserProfiles.Single(u => u.UserName == User.Identity.Name);
if (userProfile != null)
{
var player = new Player
{
UserProfile = userProfile,
....
....
};
db.Players.Add(player);
db.SaveChanges();
}
}
}
PopulateTeamsDropDownList(model.TeamId);
return View(model);
}
private void PopulateTeamsDropDownList(object selectedTeams = null)
{
var teamsQuery = from d in _iService.Teams
orderby d.Name
select d;
ViewBag.TeamID = new SelectList(teamsQuery, "TeamId", "Name", selectedTeams);
}
보기
<div class="editor-label">
@Html.LabelFor(model => model.TeamId, "Pick Your Team")
</div>
<div class="editor-field">
@Html.DropDownList("TeamId", String.Empty)
@Html.ValidationMessageFor(model => model.TeamId)
</div>
방법이 오류를 해결할 수 있습니까?
감사합니다, player.TeamId = 5;가 중요하다는 것이 밝혀졌습니다. 나는 내가 어떻게 이것을 놓쳤는 지 모른다. – Komengem
@ Floradu88 플레이어가 있는지를 확인하기 위해 데이터베이스로 불필요한 이동을하고 있습니다. 코드에서 ID를 확인하면 이미 존재한다는 것을 알 수 있습니다. 성능이 좋지 않을 경우 업데이트해야합니다. –
@FeistyMango 그건 원래 코드입니다. 왜냐하면'Player'는'UserProfile'의 자식이고'Player'를위한'UserId'가 필요하기 때문입니다. – Komengem