我再次对实体框架有一个非常奇怪的问题。
我想:
我的一些代码是:
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的
堆栈跟踪: 在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条目) at System.Data.Objects.ObjectContext.AttachSingleObject(IEntityWrapper wrappedEntity,EntitySet entitySet,String argumentName) 在System.Data.Objects.DataClasses.RelatedEnd.AddEntityToObjectStateManager(IEntityWrapper wrappedEntity,Boolean doAttach) 在System.Data.Objects.DataClasses.RelatedEnd.AddGraphToObjectStateManager(IEntityWrapper wrappedEntity,Boolean relationshipAlreadyExists,Boolean addRelationshipAsUnchanged,Boolean doAttach) at System.Data.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity,Boolean addRelationshipAsUnchanged,Boolean 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.InternalSet
1.<> 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.InternalSet
1.Attach(对象实体) 在System.Data.Entity.DbSet1.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:line 60 在CoreTillDAL.GeneralBasket.AdjustBIsforProms()在C:\ Users \ neil.clarke \ Documents \ Visual Studio 2012 \ Projects \ Plugins \ DBPromPlugin1 \ Core Classes \ EF Ext Classes \ Till \ GeneralBasketE.vb:line 245 在CoreTillDAL.GeneralBasket.ApplyBIandBaskDiscounts()在C:\ Users \ neil.clarke \ Documents \ Visual Studio 2012 \ Projects \ Plugins \ DBPromPlugin1 \ Core Classes \ EF Ext Classes \ Till \ GeneralBasketE.vb:line 174 at CoreTillDAL.PotAppliedProm.SavePromotionToBasketorItems(Int64 PromIDForThisVal,Boolean ManualActivation,Int64 BasketID,Dictionary`2 UsedBuyItems,Boolean test)in C:\ Users \ neil.clarke \ Documents \ Visual Studio 2012 \ Projects \ Plugins \ DBPromPlugin1 \ Plugins Classes \ PromClasses \ PotentialProms \ PotAppliedProm.vb:第172行 at C:\ Users \ neil.clarke \ Documents \ Visual Studio 2012 \ Projects \ Plugins \ PromDomainPlugin \ AutoPromotions \ DPromAutoApplicator.vb中的PromPlugin.DPromAutoApplicator.ApplyBestPromotiontoItems():第92行 在PromPlugin.DPromAutoApplicator.CalcandApplyPromsToBasket(GeneralBasketItem NewBasketItem)中的C:\ Users \ neil.clarke \ Documents \ Visual Studio 2012 \ Projects \ Plugins \ PromDomainPlugin \ AutoPromotions \ DPromAutoApplicator.vb:第59行 在PromPlugin.DPromController.HandleBaskItemAdded(Object o,BaskItemAddedEventArgs e)中的C:\ Users \ neil.clarke \ Documents \ Visual Studio 2012 \ Projects \ Plugins \ PromDomainPlugin \ AutoPromotions \ DPromController.vb:第53行 at 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行 在C:\ Users \ neil.clarke \ Documents \ Visual Studio 2012 \ Projects \ Plugins \ UnitTests \ TestClasses \ TestBasicTests.vb中的UnitTests.TestBasicTests.TestAllBasicPromsAuto()中:第265行 InnerException:
我不知道为什么。您可能会看到引用的两种类型:
PromAppliedPromDisc PromBaskItemDisc
不是我想要附加的类型(GeneralBasketItem)所以我不确定为什么他们甚至被提到。 PromAppliedPromDisc是GeneralBasketItem的Navigation属性(FK)。 PrombaskitemDisc是PromAppliedPromDisc的导航属性(FK)。
当EF试图将其中一个导航属性强制转换为generalbasketitem类型时,我也看到了这个问题。
有人可以帮忙吗?我没有在网上发现任何类似的问题。
答案 0 :(得分:0)
我发现清理我的解决方案,重建现在已经摆脱了这个错误。
我猜是其中一个VS错误。
答案 1 :(得分:0)
当我遇到这个问题时,我发现我的表中的Id字段被设置为标识,但它没有被标记为主键。我修好了:
alter TABLE [dbo].[Log] add CONSTRAINT [PK_Id] PRIMARY KEY CLUSTERED
(
[Id] ASC
)
..然后从数据库中重新生成模型。