代码之家  ›  专栏  ›  技术社区  ›  Raúl Roa

再次,实体框架和FK问题

  •  0
  • Raúl Roa  · 技术社区  · 14 年前

    我有一个实体有两个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不匹配。

    在这个案子里我是不是漏了点什么?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Felipe Lima    14 年前

    尝试如下设置EntityReference:

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

    它对我有用

        2
  •  0
  •   Luhmann    14 年前

    如何为Bettype和彩票创建一个存根对象,只设置ID属性,然后将其附加到各自的实体集,然后在您的赌注对象上设置这些对象,然后保存-类似于:

    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();