我使用SelfTracking实体,一切正常,直到我们在参考详细信息表中添加了一些字段。我不知道引用外键有什么问题!我没有设计数据库模式,但我可以看到一切看起来都很好!
以下是stacktrace的异常消息。
A circular relationship path has been detected while enforcing a referential integrity constraints. Referential integrity cannot be enforced on circular relationships.
System.Data.Entity
Void FixupForeignKeysByReference(System.Collections.Generic.List`1[System.Data.Objects.EntityEntry])
at System.Data.Objects.EntityEntry.FixupForeignKeysByReference(List`1 visited)
at System.Data.Objects.EntityEntry.FixupForeignKeysByReference(List`1 visited)
at System.Data.Objects.EntityEntry.FixupForeignKeysByReference(List`1 visited)
at System.Data.Objects.EntityEntry.FixupForeignKeysByReference()
at System.Data.Objects.ObjectStateManager.FixupKey(EntityEntry entry)
at System.Data.Objects.EntityEntry.AcceptChanges()
at System.Data.Objects.EntityEntry.ChangeObjectState(EntityState requestedState)
at System.Data.Objects.ObjectStateManager.ChangeObjectState(Object entity, EntityState entityState)
at Aitisi.Data.Model.SelfTrackingEntitiesContextExtensions.ChangeEntityStateBasedOnObjectState(ObjectContext context, IObjectWithChangeTracker entity) in D:\Workfile\Web Projects\Allatini_Egrisis_Aitiseis\Aitisi.Data.Model\AitisiSelfTrackModel.Context.Extensions.cs:line 732
at Aitisi.Data.Model.SelfTrackingEntitiesContextExtensions.HandleEntity(ObjectContext context, EntityIndex entityIndex, RelationshipSet allRelationships, IObjectWithChangeTracker entity) in D:\Workfile\Web Projects\Allatini_Egrisis_Aitiseis\Aitisi.Data.Model\AitisiSelfTrackModel.Context.Extensions.cs:line 597
at Aitisi.Data.Model.SelfTrackingEntitiesContextExtensions.ApplyChanges[TEntity](ObjectContext context, String entitySetName, TEntity entity) in D:\Workfile\Web Projects\Allatini_Egrisis_Aitiseis\Aitisi.Data.Model\AitisiSelfTrackModel.Context.Extensions.cs:line 85
at Aitisi.Data.Model.SelfTrackingEntitiesContextExtensions.ApplyChanges[TEntity](ObjectSet`1 objectSet, TEntity entity) in D:\Workfile\Web Projects\Allatini_Egrisis_Aitiseis\Aitisi.Data.Model\AitisiSelfTrackModel.Context.Extensions.cs:line 41
at Aitisi.Repository.Data.MtrLinesRepository.Update(MTRLINES mtrLine) in D:\Workfile\Web Projects\Allatini_Egrisis_Aitiseis\Aitisi.Repository.Data\MtrLinesRepository.cs:line 37
这是我第一次遇到这种错误。 任何帮助表示赞赏。
谢谢。
答案 0 :(得分:2)
我认为问题出在导航属性上。我将尝试举一个简短的例子。
假设您有两个实体Order和Customer。 如果您获取Customer并将其保留在内存中,则将其添加到Order对象ex的实例中。 Order.Customer = Customer然后NavigationProperties的自动修复将订单添加到客户的导航属性。
如果您随后创建新订单并将相同的客户添加到订单获取的订单 客户和客户的导航修正获得另一个订单,因此您最终会在Customer Class中引用两个Order对象的引用。如果您保存Order聚合根对象,那么ef将遍历Order中的所有对象并在Customer对象中找到两个订单并尝试保存它们,但第一个已经保存,因此您最终会遇到异常。为避免这种情况,请勿仅使用对象外键。 Order.CustomerId = Customer.Id;
答案 1 :(得分:0)
过去我遇到过这个问题:
由于在新的上下文中没有跟踪对象#1的状态,因此它给出了循环引用警告。
要解决此问题,请尝试使用DbSet(Of T).Attach方法,如下面的代码所示:
Using ctx = New AtlasEntities
modelDefinition = Await ctx.ModelDefinitions.First(Function(f) f.Id=Id)
End Using
ModelResult = modelDefinition.DoSomeWork()
Using ctx As New AtlasEntities
ctx.ModelDefinitions.Attach(modelDefinition)
ctx.ModelResults.Add(ModelResult)
Dim success = Await ctx.SaveChangesQuickly.ConfigureAwait(False)
End Using