1

我使用模型优先方法创建了一个项目,在我的模型中,我声明了实体之间的多对多关系,Musician并且Session(代表某种排练或表演)。正如预期的那样,这在我的数据库中生成了一个数据透视表来处理关系,但没有用于中间表的 C# 模型类。所以,在我的Session对象上,我有一个Musicians声明为的集合ICollection

public virtual ICollection<Musician> Musicians { get; set; }

HashSet在构造函数中初始化为 a Session

public Session()
{
    this.Musicians = new HashSet<Musician>();
}

现在,在我的解决方案的其他地方(在 MVC 控制器中,如果重要的话),我想将现有分配Musician给给定的Session,所以我有这个代码:

Musician musician = db.Musicians.First(m => m.Id == selectedMusician);
session.Musicians.Add(musician);
db.SaveChanges();

就在session.Musicians.Add(musician)调用之后,我检查了音乐家是否已添加到集合中,但调用db.SaveChanges似乎不会将更改持久化到数据库中。

顺便说一句,db 是我的存储库,其中包含我所有的模型,例如,这段代码成功地Session向数据库添加了一个新的:

db.Sessions.Add(session);
db.SaveChanges();

如果有人能指出我在这种情况下如何将对象添加到集合中的正确方向,那将是一个很大的帮助。

干杯

编辑:原来问题与它是一个集合的事实无关。就像我在帖子中提到的那样,我试图从 ASP MVC 项目中的控制器类进行更改/保存。会话对象是从视图中传入的,但我发现我对这个对象所做的任何更改都不会保留在数据库中(哦,愚蠢的我,应该马上检查一下)。看起来视图传入的对象只是一个副本,因为它不是直接来自上下文(在这种情况下,是我的 db 对象)。为了解决这个问题,我只是在上下文中查询Session具有相同 ID 的对象,以便访问我的更改实际上会持续存在的对象。

4

0 回答 0