views:

81

answers:

2

I have an entity with two fk's. I've been trying to insert a record to the database without success. This are the approaches I've used:

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

In this case the second object gets assigned but when calling the SaveChanges method I get an error saying that the properties of the Lottery object were 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);

In this case I get another weird error. When the object is being added to the collection.

The object could not be added or attached because its EntityReference has an EntityKey property value that does not match the EntityKey for this object.

Am I missing something in this case?

A: 

How about creating a stub object for BetType and Lottery where you set only the Id property, and then attach those to their respective EntitySets, and then setting these objects on you Bet object, and save - something like:

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();
Luhmann
When I attach this, it seems its trying to insert a new row on the table.
Raúl Roa
A: 

Try setting the EntityReference like this:

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

It works for me

Felipe Lima
Already tried this. I get the same error.
Raúl Roa