2010-04-27 44 views
0

我有点麻烦插入到使用实体框架的mssql数据库。我想插入两个表,其中表1中的一个字段是table2中的外键。实体框架:插入与一对一参考

这是我的代码至今:

Media media = null; 
foreach(POI p in poiList) 
{ 
    media = new Media() 
    { 
     Path = p.ImagePath, 
     Title = p.Title 
    }; 

    if (media != null && !context.Media.Any(me => me.Title == p.ImageTitle)) 
    { 
     context.AddToMedia(media); 
     context.SaveChanges(); 
    } 

    PointOfInterest poi = new PointOfInterest() 
    { 
     Altitude = 2000.0, 
     ID = p.ID, 
     Latitude = p.Latitude, 
     Longitude = p.Longitude, 
     LatitudeRoute = p.LatitudeRoute, 
     LongitudeRoute = p.LongitudeRoute, 
     Description = p.Description, 
     Title = p.Title, 
     DefaultImageID = media.ID, 
    };  
    context.AddToPointOfInterest(poi); 
} 
context.SaveChanges(); 

下使我这个错误:

具有相同键的对象在ObjectStateManagerAn对象已经存在具有相同的键已经存在在ObjectStateManager中

我还在学习如何使用实体框架,所以我甚至不知道这是否是插入两个引用表的正确方法。

任何人都可以在这方面启发我吗? :) 任何帮助将不胜感激!

谢谢!

+0

约40个媒体对象添加到数据库并且指向context.AddToMedia()方法后,弹出错误消息。 – bomortensen 2010-04-27 10:11:21

回答

0

这意味着错误说的是什么。你有一个主键违规。您只能使用给定的键值呼叫Context.AddTo...一次。找出哪个实体导致错误,并且您会看到上下文中已经有另一个实体具有相同的密钥。