2010-02-06 3 views
0

У меня есть сущность с двумя fk. Я пытаюсь вставить запись в базу данных без успеха. Это те подходы, которые я использовал:Еще раз проблемы Entity Framework и 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

Пожалуйста, покажите полный код, который вы используете для вставки, а не только эти две строки. Оба метода, которые вы показываете, прекрасны. Ваша ошибка где-то в другом месте. Моя дикая догадка заключается в том, что вы используете несколько ObjectContexts, но это трудно сказать, не видя кода. –

ответ

0

установка EntityReference как это Try:

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

это работает для меня

+0

Уже пробовал это. Я получаю ту же ошибку. –

0

Как насчет создания объекта заглушки для BetType и лотерей, где вы установили только свойство 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(); 
+0

Когда я прикрепляю это, кажется, он пытается вставить новую строку в таблицу. –

Смежные вопросы