实体框架 - 防止更新查找表

时间:2016-08-03 01:43:40

标签: entity-framework

我有以下数据库架构

enter image description here

我尝试使用以下代码插入新的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表做任何事情。如何防止它尝试插入播放器表?

2 个答案:

答案 0 :(得分:0)

看起来,EntryPlayer需要一个PlayerID,所以它会为你尝试插入。

根据图表,我不确定EntryPlayer的用途是什么。你可以重构如下吗?

  1. 将Captain字段移至UserEntry
  2. 删除EntryPlayer表
  3. 将Players Naviation属性直接添加到UserEntry为1到多个

答案 1 :(得分:0)

我需要让Player实体保持不变。这段代码诀窍

 // insert
 foreach (var entryPlayer in userEntry.EntryPlayers)
 {
     db.Entry(entryPlayer.Player).State = EntityState.Unchanged;
 }

 db.UserEntries.Add(userEntry);