这是 this question 的后续问题我昨天问过。我已经准确地找到了我认为导致我悲伤的问题,并且我想我可以更清楚地解释情况。
我似乎无法弄清楚如何在 C# ASP.NET MVC 2 项目中使用 Entity Framework 编写与 SQL 数据库具有多对多关系的对象。
这是我尝试过的:
我有一个非常简单的数据库,只有两个表。具有名称和描述列的爱好以及具有名字和姓氏列的人物。我创建了一个默认的 .edmx 文件并选择了所有内容。 (两者都使用 int 作为主键(HobbieID、PersonID),我在数据库中将其设置为自动递增。)
然后我可以成功使用以下代码:
SampleEntities entities = new SampleEntities();
Hobby h1 = new Hobby() { Name = "Tennis", Description = "Not golf" };
Person p1 = new Person() { First = "Jack", Last = "Black" };
entities.Hobbies.AddObject(h1);
entities.People.AddObject(p1);
entities.SaveChanges();
果然,两者都已正确添加到数据库中。现在它坏了。
我在名为 JunctionHobbiesPeople 的数据库中添加了另一个表,该表有两列(HobbieID、PersonID),我使用数据库设计器中的关系弹出窗口创建外键。然后,我将 JunctionHobbiesPeople 表添加到实体设计器(通过右键单击更新,使用 GUI),它以图形方式显示正确的多对多关系。
然后我尝试以下代码:
SampleEntities entities = new SampleEntities();
Hobby h1 = new Hobby() { Name = "Tennis", Description = "Not golf" };
Person p1 = new Person() { First = "Jack", Last = "Black" };
p1.Hobbies.Add(h1);
entities.People.AddObject(p1);
entities.SaveChanges();
我收到的第一个错误是关于 DefiningQuery 的。我可以通过从 .edmx 文件后面的代码中的 xml 中删除所有 DefiningQuery 元素来解决此问题。说到这里,作为一个附带问题,该元素的用途是什么 - 我不应该删除它吗?
该错误消失后,我收到以下错误:
InnerException {"Invalid object name 'ModelStoreContainer.JunctionHobbiesPeople'."} System.Exception {System.Data.SqlClient.SqlException}
知道我做错了什么吗?我必须按照特殊顺序插入它们吗?如何将多对多关系正确写入数据库?
感谢您的帮助!
最佳答案
我想你自从 2010 年发布以来就已经解决了这个问题,无论如何这可能对其他人有帮助:) 我在使用 MVC3 时遇到了同样的问题。 我原来的 edmx 文件有一行看起来像这样:
<EntitySet Name="StockUpdates" EntityType="SwebotModel.Store.StockUpdates" store:Type="Tables" store:Schema="dbo" store:Name="StockUpdates"/>
为了解决这个问题,我将其更改为:
<EntitySet Name="StockUpdates" EntityType="SwebotModel.Store.StockUpdates" store:Type="Tables" Schema="dbo"/>
删除 store:Name 和架构之前的“store:”。
关于c# - 如何使用 Entity Framework 提交具有多对多关系的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3312905/