【问题标题】:Entity framework creating new entries from navigation properties实体框架从导航属性创建新条目
【发布时间】:2016-05-13 22:29:11
【问题描述】:

我有以下型号:

public class Conversation
{
    public int ConversationId { get; set; }
    public virtual User Owner { get; set; }
    public virtual ICollection<User> Users { get; set; }

}


public class User
{
    public int UserId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Conversation> Conversations { get; set; }
}

我到达了以下端点:

        private DirectAPIContext db = new DirectAPIContext();

    [HttpPost]
    public async Task<Conversation> CreateConversation([FromBody] Conversation conversation)
    {
        Conversation newConversation = conversation;

        db.Conversations.Add(newConversation);

        await db.SaveChangesAsync();

        return newConversation;
    }

有了这些数据:

 {
"ConversationId": 7,
  "Owner": {
    "UserId": 27,
    "Name": null,
    "Conversations": null
  },
  "Users": [
    {
      "UserId": 28,
      "Name": null,
      "Conversations": null
    },
    {
      "UserId": 29,
      "Name": null,
      "Conversations": null
    },
    {
      "UserId": 30,
      "Name": null,
      "Conversations": null
    }
  ]
}

Entity Framework 不是引用预先存在的用户对象,而是像这样创建新的用户对象:

    {
  "ConversationId": 7,
  "Owner": {
    "UserId": 27,
    "Name": null,
    "Conversations": null
  },
  "Users": [
    {
      "UserId": 28,
      "Name": null,
      "Conversations": null
    },
    {
      "UserId": 29,
      "Name": null,
      "Conversations": null
    },
    {
      "UserId": 30,
      "Name": null,
      "Conversations": null
    }
  ]
}

我不确定我的导航属性是否不正确。 Conversation 和 User 的关系应该是多对多的关系。

【问题讨论】:

    标签: c# asp.net entity-framework ef-code-first


    【解决方案1】:

    是的,这是预期的行为。 EF 将尝试插入您添加的任何对象(直接或通过导航属性),除非该对象已附加到跟踪图。在这种情况下,它将改为添加相关的 FK 或链接表行。

    您想要做的是对您知道已经在数据库中的每个用户调用db.Users.Attach(user)。这应该会给你预期的行为(例如添加一个链接行而不是插入一个新的用户行)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多