2010-02-06 62 views
0

我有一个实体有两个fk's。我一直试图向数据库插入一条记录而没有成功。这是我所使用的方法:第二个对象被分配又是实体框架和FK问题

valuePaymentBetToAdd.BetType = db.BetTypes.First(betType => betType.Id == valuePaymentBetToAdd.BetType.Id); 
    valuePaymentBetToAdd.Lottery = db.Lotteries.First(lotto => lotto.Id == valuePaymentBetToAdd.Lottery.Id); 

在这种情况下,但在调用SaveChanges方法时,我得到一个错误,指出彩民对象的属性都为空的。

valuePaymentBetToAdd.BetTypeReference.EntityKey = new EntityKey(db.DefaultContainerName + ".BetType", "Id", valuePaymentBetToAdd.BetType.Id); 
    valuePaymentBetToAdd.LotteryReference.EntityKey = new EntityKey(db.DefaultContainerName + ".Lottery", "Id", valuePaymentBetToAdd.Lottery.Id); 

在这种情况下,我得到另一个奇怪的错误。当对象被添加到集合中时。

该对象无法添加或附加,因为其EntityReference具有与此对象的EntityKey不匹配的EntityKey属性值。

我在这种情况下错过了什么吗?

+0

请出示你使用插入,而不只是这两行的全部代码。你展示的两种方法都很好。你的bug在别的地方。我疯狂的猜测是你使用了多个ObjectContexts,但是很难说没有看到代码。 – 2010-02-08 14:30:29

回答

0

尝试设置的EntityReference这样的:

valuePaymentBetToAdd.BetTypeReference.EntityKey = b.BetTypes.First(betType => betType.Id == valuePaymentBetToAdd.BetType.Id).EntityKey; 

它为我

+0

已经尝试过。我犯了同样的错误。 – 2010-02-06 22:48:30

0

怎么样在BetType和彩票创建存根对象,其中仅设置ID属性,然后安装这些各自EntitySets,然后下注对象,你设置这些对象,并保存 - 是这样的:

Lottery lottery = new Lottery() { Id = valuePaymentBetToAdd.Lottery.Id }; 
BetType betType = new BetType() { Id = valuePaymentBetToAdd.BetType.Id }; 

MyContext.AttachTo("Lottery", lottery); 
MyContext.AttachTo("BetType", betType); 

valuePaymentBetToAdd.Lottery = lottery; 
valuePaymentBetToAdd.BetType = betType; 

MyContext.AddToBet(valuePaymentBetToAdd); 
MyContext.SaveChanges(); 
+0

当我附上这个,它似乎试图在表上插入一个新的行。 – 2010-02-07 18:05:43