InvalidCastException при вызове Attach Entity Framework 5

1

У меня снова есть очень странная проблема с Entity Framework.

Я хочу:

Отправить хэш объектов для метода Загрузите эти объекты из базы данных Обновите одно из полей в каждом из объектов Сохраните объекты обратно в базу данных, либо сразу, либо по отдельности

Некоторые из моих кодов:

For Each BI As GeneralBasketItem In UsedDiscItems
Using db As New Till1Entities1 
db.GeneralBasketItem.Attach(BI)

"Я попытался использовать контекст снаружи и внутри каждого, чтобы экспериментировать с этим.

Часть схемы БД: http://imgur.com/kA47ZjU

Последняя строка иногда не всегда бросает следующее исключение:

System.InvalidCastException не был обработан кодом пользователя HResult = -2147467262 Message = Невозможно передать объект типа "System.Data.Entity.DynamicProxies.PromAppliedPromDisc_052D0BC99A5A9E842B5774E34C71C0ADE6170E70600ADE549AAA5F0EEA48E49F" для ввода "CoreTillDAL.PromBaskItemDisc". Источник = System.Data.Entity

StackTrace: at System.Data.Objects.DataClasses.EntityReference 1.AddToLocalCache(IEntityWrapper wrappedEntity, Boolean applyConstraints) at System.Data.Objects.EntityEntry.TakeSnapshotOfSingleRelationship(RelatedEnd relatedEnd, NavigationProperty n, Object o) at System.Data.Objects.EntityEntry.TakeSnapshotOfRelationships() at System.Data.Objects.Internal.EntityWrapperWithoutRelationships 1.TakeSnapshotOfRelationships (запись EntityEntry) в System.Data.Objects.ObjectContext.AttachSingleObject(IEntityWrapper wrappedEntity, EntitySet entitySet, String аргументName) в System.Data.Objects.DataClasses. RelatedEnd.AddEntityToObjectStateManager(IEntityWrapper wrappedEntity, булева doAttach) при System.Data.Objects.DataClasses.RelatedEnd.AddGraphToObjectStateManager(IEntityWrapper wrappedEntity, булевы relationshipAlreadyExists, Boolean, Boolean addRelationshipAsUnchanged doAttach) при System.Data.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity, Boolean addRelationshipA sUnchanged, Boolean doAttach) в System.Data.Objects.DataClasses.EntityReference 1.Include(Boolean addRelationshipAsUnchanged, Boolean doAttach) at System.Data.Objects.DataClasses.RelationshipManager.AddRelatedEntitiesToObjectStateManager(Boolean doAttach) at System.Data.Objects.ObjectContext.AttachTo(String entitySetName, Object entity) at System.Data.Entity.Internal.Linq.InternalSet 1. <> C__DisplayClass2.b__1() в System.Data.Entity.Internal.Linq.InternalSet 1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) at System.Data.Entity.Internal.Linq.InternalSet 1.Attach (объект объекта) в System.Data.Entity.DbSet 1.Attach(TEntity entity) at CoreTillDAL.PromSetPrice.AdjustBaskItems(HashSet 1 UsedDiscItems) в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPromPlugin1\Plugins Classes\PromAndDisc\PromSetPriceE.vb: строка 60 в CoreTillDAL.GeneralBasket.AdjustBIsforProms() в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPr omPlugin1\Core Classes\EF Ext Classes\Till\GeneralBasketE.vb: строка 245 в CoreTillDAL.GeneralBasket.ApplyBIandBaskDiscounts() в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPromPlugin1\Core Classes\EF Ext Classes\Till\GeneralBasketE.vb: строка 174 в CoreTillDAL.PotAppliedProm.SavePromotionToBasketorItems(Int64 PromIDForThisVal, логическая ручная активация, Int64 BasketID, словарь'2 UsedBuyItems, булевский тест) в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPromPlugin1\Plugins Classes\PromClasses\PotentialProms\PotAppliedProm.vb: строка 172 в PromPlugin.DPromAutoApplicator.ApplyBestPromotiontoItems() в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\PromDomainPlugin\AutoPromotions\DPromAutoApplicator.vb: строка 92 в PromPlugin.DPromAutoApplicator.CalcandApplyPromsToBasket(GeneralBasketItem NewBasketItem) в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\PromDomainPlugin\AutoPromotions\DPromAutoApplicator.v b: строка 59 в PromPlugin.DPromController.HandleBaskItemAdded(Object o, BaskItemAddedEventArgs e) в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\PromDomainPlugin\AutoPromotions\DPromController.vb: строка 53 в CoreTillDAL. CoreTill.AddBasketItem(Int64 BasketID, Int64 ProductID) в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPromPlugin1\Core Classes\EF Ext Classes\Till\CoreTill.vb: строка 29 в UnitTests. TestingStoredProcs.addBasketItemsToTriggerProm(GeneralBasket Basket, Int64 PromID, DPromController & PromCont) в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\UnitTests\TestingStoredProcs.vb: строка 545 в UnitTests.TestBasicTests.TestAllBasicPromsAuto() в C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\UnitTests\TestClasses\TestBasicTests.vb: строка 265 InnerException:

Понятия не имею почему. Поскольку вы можете увидеть два типа ссылок:

PromAppliedPromDisc PromBaskItemDisc

Не тот тип, который я пытаюсь прикрепить (GeneralBasketItem), поэтому я не уверен, почему они даже упоминаются. PromAppliedPromDisc является навигационным свойством (FK) для GeneralBasketItem. PrombaskitemDisc является навигационным свойством (FK) PromAppliedPromDisc.

Я также видел эту проблему, когда EF пыталась применить одно из свойств навигации к типу generalbasketitem.

Может ли кто-нибудь помочь? Я не нашел подобных проблем в Интернете.

Теги:
entity-framework
entity-framework-5

2 ответа

0
Лучший ответ

Я нашел, что убрал мое решение, и перестройка уже избавилась от этой ошибки.

Я предполагаю, что это один из тех ошибок VS.

0

Когда я столкнулся с этой проблемой, оказалось, что поле Id в моей таблице было установлено как личность, но оно не было помечено как первичный ключ. Я исправил это с помощью:

alter TABLE [dbo].[Log] add CONSTRAINT [PK_Id] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)

.. и затем регенерировать модель из базы данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню