【问题标题】:Removing a many-to-many relationship (when you have only the entity ids)删除多对多关系(当您只有实体 ID 时)
【发布时间】:2016-02-07 22:36:51
【问题描述】:

我正在尝试从主题中删除用户(多对多关系),但它说 topic.Users 为空。我做错了什么?

var user = new User { Id = userId };
var topic = new Topic { Id = topicId };
context.Users.Attach(user);
context.Topics.Attach(topic);
topic.Users.Remove(user);

实体类

主题:

[InverseProperty("TopicsSubscribed")]
public virtual ICollection<User> Users { get; set; }

用户:

public virtual ICollection<Topic> TopicsSubscribed { get; set; }

【问题讨论】:

  • 你能显示实体类吗?
  • 添加到我的问题中。

标签: c# entity-framework many-to-many


【解决方案1】:

您的导航属性(在本例中为 Users)未加载,因为您的 topic 实体未由动态代理包装,因此导航属性不会延迟加载。

您可以像这样显式加载Users 属性:

var user = new User { Id = userId };
var topic = new Topic { Id = topicId };
context.Users.Attach(user);
context.Topics.Attach(topic);
context.Entry(topic).Collection(t => t.Users).Load();  // explicitly load Users ...
topic.Users.Remove(user);

【讨论】:

  • 试过了,我得到了这个:“'Topic'类型的属性'Users'是一个集合导航属性。应该使用Collection方法而不是Reference方法。”。
  • 哦,对不起我的错。更新了我的答案。当然,您必须致电 .Collection 而不是 .Reference
  • 谢谢。像它应该的那样工作。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2018-07-04
相关资源
最近更新 更多