Eva*_*van 2 c# many-to-many entity-framework asp.net-mvc-2
这是我昨天问过的这个问题的后续问题.我已经找到了我认为让我感到悲伤的问题,我认为我可以更清晰地解释这种情况.
我似乎无法弄清楚如何使用C#ASP.NET MVC 2项目中的实体框架编写与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();
Run Code Online (Sandbox Code Playgroud)
两个都正确地添加到数据库中.现在它打破了.
我添加了一个名为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();
Run Code Online (Sandbox Code Playgroud)
我得到的第一个错误是关于DefiningQuery.我可以通过删除.edmx文件后面的代码中的xml中的所有DefiningQuery元素来解决这个问题.说到这个问题,那个元素是什么 - 我不应该删除吗?
在该错误消失后,我收到以下错误:
InnerException {"Invalid object name 'ModelStoreContainer.JunctionHobbiesPeople'."} System.Exception {System.Data.SqlClient.SqlException}
Run Code Online (Sandbox Code Playgroud)
任何想法都是我做错了什么?我是否必须按特殊顺序插入它们?如何才能将多对多关系正确写入数据库?
谢谢你的帮助!!!
小智 5
我想你已经解决了这个问题,因为你在2010年发布了,无论如何这可能会帮助别人:)我在使用MVC3时遇到了同样的问题.我原来的edmx文件有一行看起来像这样:
<EntitySet Name="StockUpdates" EntityType="SwebotModel.Store.StockUpdates" store:Type="Tables" store:Schema="dbo" store:Name="StockUpdates"/>
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我将其更改为:
<EntitySet Name="StockUpdates" EntityType="SwebotModel.Store.StockUpdates" store:Type="Tables" Schema="dbo"/>
Run Code Online (Sandbox Code Playgroud)
删除商店:名称和Schema之前的"store:".