【发布时间】:2014-10-22 15:24:19
【问题描述】:
我又遇到了一个非常奇怪的实体框架问题。
我想:
我的一些代码是:
For Each BI As GeneralBasketItem In UsedDiscItems
Using db As New Till1Entities1
db.GeneralBasketItem.Attach(BI)
''我尝试在 for each 的外部和内部设置上下文来对此进行试验。
部分数据库架构: http://imgur.com/kA47ZjU
最后一行有时,并不总是抛出以下异常:
System.InvalidCastException 未被用户代码处理 H结果=-2147467262 消息=无法将类型为“System.Data.Entity.DynamicProxies.PromAppliedPromDisc_052D0BC99A5A9E842B5774E34C71C0ADE6170E70600ADE549AAA5F0EEA48E49F”的对象转换为类型“CoreTillDAL.PromBaskItemDisc”。 Source=System.Data.Entity
堆栈跟踪: 在 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.EntityWrapperWithoutRelationships1.TakeSnapshotOfRelationships(EntityEntry 条目) 在 System.Data.Objects.ObjectContext.AttachSingleObject(IEntityWrapper WrappedEntity,EntitySet entitySet,String argumentName) 在 System.Data.Objects.DataClasses.RelatedEnd.AddEntityToObjectStateManager (IEntityWrapper WrappedEntity,布尔 doAttach) 在 System.Data.Objects.DataClasses.RelatedEnd.AddGraphToObjectStateManager(IEntityWrapper WrappedEntity,布尔关系已存在,布尔 addRelationshipAsUnchanged,布尔 doAttach) 在 System.Data.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper 包裹实体,布尔 addRelationshipAsUnchanged,布尔 doAttach) 在 System.Data.Objects.DataClasses.EntityReference1.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.InternalSet1.c__DisplayClass2.b__1() 在 System.Data.Entity.Internal.Linq.InternalSet1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) at System.Data.Entity.Internal.Linq.InternalSet1.Attach(对象实体) 在 System.Data.Entity.DbSet1.Attach(TEntity entity) at CoreTillDAL.PromSetPrice.AdjustBaskItems(HashSet1 UsedDiscItems) 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPromPlugin1\Plugins Classes\PromAndDisc\PromSetPriceE.vb:line 60 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPromPlugin1\Core Classes\EF Ext Classes\Till\GeneralBasketE.vb:line 245 中的 CoreTillDAL.GeneralBasket.AdjustBIsforProms() 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPromPlugin1\Core Classes\EF Ext Classes\Till\GeneralBasketE.vb:line 174 中的 CoreTillDAL.GeneralBasket.ApplyBIandBaskDiscounts() 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\DBPromPlugin1\Plugins Classes\PromClasses 中的 CoreTillDAL.PotAppliedProm.SavePromotionToBasketorItems(Int64 PromIDForThisVal, Boolean ManualActivation, Int64 BasketID, Dictionary`2 UsedBuyItems, Boolean test) \PotentialProms\PotAppliedProm.vb:第 172 行 在 PromPlugin.DPromAutoApplicator.ApplyBestPromotiontoItems() 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\PromDomainPlugin\AutoPromotions\DPromAutoApplicator.vb:line 92 在 PromPlugin.DPromAutoApplicator.CalcandApplyPromsToBasket(GeneralBasketItem NewBasketItem) 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\PromDomainPlugin\AutoPromotions\DPromAutoApplicator.vb:line 59 在 PromPlugin.DPromController.HandleBaskItemAdded(Object o, BaskItemAddedEventArgs e) 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\PromDomainPlugin\AutoPromotions\DPromController.vb:line 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:line 29 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\UnitTests\TestingStoredProcs.vb:line 545 中的 UnitTests.TestingStoredProcs.addBasketItemsToTriggerProm(GeneralBasket Basket, Int64 PromID, DPromController& PromCont) 在 UnitTests.TestBasicTests.TestAllBasicPromsAuto() 在 C:\Users\neil.clarke\Documents\Visual Studio 2012\Projects\Plugins\UnitTests\TestClasses\TestBasicTests.vb:line 265 内部异常:
我不知道为什么。您可能会看到引用的两种类型:
PromAppliedPromDisc PromBaskItemDisc
不是我要附加的类型(GeneralBasketItem),所以我不确定为什么会提到它们。 PromAppliedPromDisc 是 GeneralBasketItem 的导航属性 (FK)。 PrombaskitemDisc 是 PromAppliedPromDisc 的导航属性 (FK)。
当 EF 尝试将导航属性之一转换为 generalbasketitem 类型时,我也看到了这个问题。
有人可以帮忙吗?网上没有发现类似的问题。
【问题讨论】:
标签: c# .net vb.net entity-framework entity-framework-5