我有以下数据库架构
我尝试使用以下代码插入新的UserEntry记录
UserEntry dbUserEntry;
using (dbContext db = new DBContext())
{
// check for existing record
dbUserEntry = db.UserEntries
.Where(u => u.UserEntryID == userEntry.UserEntryID)
.Include(u => u.EntryPlayers.Select(y => y.Player))
.FirstOrDefault();
if (dbUserEntry != null)
{
// update
dbUserEntry.TeamName = userEntry.TeamName;
dbUserEntry.EntryPlayers = userEntry.EntryPlayers;
}
else
{
// insert
db.UserEntries.Add(userEntry);
}
return db.SaveChanges();
}
问题是它试图插入Players表中,这实际上只是一个查找表。该表上有一个索引,表示代码失败。
我真正想做的是只插入带有EntryPlayer详细信息的UserEntry记录。我不想对Players表做任何事情。如何防止它尝试插入播放器表?
答案 0 :(得分:0)
看起来,EntryPlayer需要一个PlayerID,所以它会为你尝试插入。
根据图表,我不确定EntryPlayer的用途是什么。你可以重构如下吗?
答案 1 :(得分:0)
我需要让Player实体保持不变。这段代码诀窍
// insert
foreach (var entryPlayer in userEntry.EntryPlayers)
{
db.Entry(entryPlayer.Player).State = EntityState.Unchanged;
}
db.UserEntries.Add(userEntry);