我使用模型第一种方法创建了一个项目,在我的模型中,我声明了实体之间的多对多关系,Musician
和Session
(表示某种排练或表现)。正如所料,这在我的数据库中生成了一个数据透视表来处理关系,但没有为中间表生成C#模型类。因此,在我的Session
对象上,我有一个Musicians
的集合,声明为ICollection
:
public virtual ICollection<Musician> Musicians { get; set; }
在HashSet
构造函数中初始化为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对象)。
为了解决这个问题,我只是查询具有相同Id的Session
对象的上下文,以便能够访问我的更改实际上会持久存在的对象。