c# - 如何使用 Entity Framework 提交具有多对多关系的对象?

标签 c# entity-framework asp.net-mvc-2 many-to-many

这是 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/

相关文章:

c# - 队列保持引用或对象值?

c# - 列表框无法识别 MouseLeftButtonDown?

c# - MySQL数据库连接

entity-framework - EF Core 中的表值函数

c# - 防止 Entity Framework 将外键设置为 NULL

asp.net-mvc - 将 MVC 的 AuthorizeAttribute 与多组角色一起使用?

c# - 用于前端数据库访问的 Orchard 小部件

c# - 正则表达式获取字符串中的最后一个冒号及其后的所有内容

c# - 根据用户角色动态创建菜单

asp.net-mvc-2 - ASP.NET Mvc - 可为空参数和逗号作为分隔符