Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架:向集合添加项不会在数据库中持久存在_C#_.net_Entity Framework_Many To Many - Fatal编程技术网

C# 实体框架:向集合添加项不会在数据库中持久存在

C# 实体框架:向集合添加项不会在数据库中持久存在,c#,.net,entity-framework,many-to-many,C#,.net,Entity Framework,Many To Many,我使用模型优先的方法创建了一个项目,在我的模型中,我声明了实体、音乐家和代表某种排练或表演的会话之间的多对多关系。正如预期的那样,这在我的数据库中生成了一个pivot表来处理关系,但没有为中间表生成C模型类。因此,在我的Session对象上,我有一组音乐家被声明为ICollection: 现在,在我的MVC控制器解决方案的其他地方,如果有必要的话,我想为给定的会话分配一个现有的音乐家,所以我有以下代码: Musician musician = db.Musicians.First(m =>

我使用模型优先的方法创建了一个项目,在我的模型中,我声明了实体、音乐家和代表某种排练或表演的会话之间的多对多关系。正如预期的那样,这在我的数据库中生成了一个pivot表来处理关系,但没有为中间表生成C模型类。因此,在我的Session对象上,我有一组音乐家被声明为ICollection:

现在,在我的MVC控制器解决方案的其他地方,如果有必要的话,我想为给定的会话分配一个现有的音乐家,所以我有以下代码:

Musician musician = db.Musicians.First(m => m.Id == selectedMusician);
session.Musicians.Add(musician);
db.SaveChanges();
调用session.Musiners.AddMusiner之后,我检查了Musiner是否已添加到集合中,但调用db.SaveChanges似乎无法将更改持久保存到数据库中

顺便说一下,db是我的存储库,包含我的所有模型,例如,此代码成功地将新会话添加到数据库中:

db.Sessions.Add(session);
db.SaveChanges();
如果有人能给我指出在这种情况下如何向集合中添加对象的正确方向,那将是一个很大的帮助

干杯

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

那么,表是在db中定义的吗?问题中的代码没有问题,它应该可以工作。您没有收到任何异常?@Wim No exceptions,db.SaveChanges被调用,我检查数据库,没有SessionMusician条目SessionMusician是会话音乐家关系的表,我可以手动向其添加条目,我的集合正确识别该关系您没有在示例中显示如何获得会话。如果未附加到上下文,则不会将更改保存到数据库。@LadislavMrnka您是对的,谢谢!:我的MVC应用程序中的一个视图返回了我的会话,我只是在db对象的上下文中查询了一个具有相同ID的会话,对该对象进行了更改,称为SaveChanges,它成功了。
Musician musician = db.Musicians.First(m => m.Id == selectedMusician);
session.Musicians.Add(musician);
db.SaveChanges();
db.Sessions.Add(session);
db.SaveChanges();