实体框架和 FK 问题再次出现
Posted
技术标签:
【中文标题】实体框架和 FK 问题再次出现【英文标题】:Yet again Entity Framework and FK problems 【发布时间】:2010-02-06 20:48:32 【问题描述】:我有一个有两个 fk 的实体。我一直在尝试向数据库插入一条记录,但没有成功。这是我使用的方法:
valuePaymentBetToAdd.BetType = db.BetTypes.First(betType => betType.Id == valuePaymentBetToAdd.BetType.Id);
valuePaymentBetToAdd.Lottery = db.Lotteries.First(lotto => lotto.Id == valuePaymentBetToAdd.Lottery.Id);
在这种情况下,第二个对象被分配,但在调用 SaveChanges 方法时,我收到一个错误,指出 Lottery 对象的属性为空。
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 不匹配。
在这种情况下我错过了什么吗?
【问题讨论】:
请显示您用于插入的完整代码,而不仅仅是这两行。你展示的两种方法都很好。您的错误在其他地方。我的疯狂猜测是您使用了多个 ObjectContext,但如果不看代码就很难判断。 【参考方案1】:尝试像这样设置 EntityReference:
valuePaymentBetToAdd.BetTypeReference.EntityKey = b.BetTypes.First(betType => betType.Id == valuePaymentBetToAdd.BetType.Id).EntityKey;
对我有用
【讨论】:
【参考方案2】:如何为 BetType 和 Lottery 创建一个存根对象,您只设置 Id 属性,然后将它们附加到它们各自的 EntitySets,然后在您的 Bet 对象上设置这些对象,然后保存 - 类似于:
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();
【讨论】:
当我附上这个时,它似乎试图在表格上插入一个新行。以上是关于实体框架和 FK 问题再次出现的主要内容,如果未能解决你的问题,请参考以下文章