然而,实体框架和FK再次出现问题

时间:2010-02-06 20:48:33

标签: entity-framework orm

我有一个有两个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对象的属性为null。

    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不匹配。

我在这种情况下遗漏了什么吗?

2 个答案:

答案 0 :(得分:0)

如何为BetType和Lottery创建存根对象,只设置Id属性,然后将它们附加到各自的EntitySet,然后在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();

答案 1 :(得分:0)

尝试像下面这样设置EntityReference:

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

它对我有用

相关问题