C# 在实体框架DbContext中使用Newtonsoft.Json时,不会解析成员异常的类型

C# 在实体框架DbContext中使用Newtonsoft.Json时,不会解析成员异常的类型,c#,.net,json,entity-framework,json.net,C#,.net,Json,Entity Framework,Json.net,在我的DbContext类中,我刚刚添加了对Newtonsoft.Json的一些引用,因为我正在使用它存储实体的序列化版本以供审核 现在,当我运行updatedatabase命令时,我在控制台中得到以下信息 指定'-Verbose'标志以查看应用于目标数据库的SQL语句。 没有挂起的显式迁移。 运行种子法 System.Runtime.Serialization.SerializationException:未解析成员“Newtonsoft.Json.JsonSerializationExcep

在我的
DbContext
类中,我刚刚添加了对
Newtonsoft.Json
的一些引用,因为我正在使用它存储实体的序列化版本以供审核

现在,当我运行
updatedatabase
命令时,我在控制台中得到以下信息

指定'-Verbose'标志以查看应用于目标数据库的SQL语句。
没有挂起的显式迁移。
运行种子法

System.Runtime.Serialization.SerializationException:未解析成员“Newtonsoft.Json.JsonSerializationException,Newtonsoft.Json,Version=7.0.0.0,Culture=neutral,PublicKeyToken=30AD4FE6B2A6EED”的类型。
在System.AppDomain.docCallback(CrossAppDomainDelegate callBackDelegate)
位于System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner运行程序)
位于System.Data.Entity.Migrations.Design.ToolingFacade.Update(字符串targetMigration,布尔值force)
在System.Data.Entity.Migrations.UpdateDatabaseCommand.c_uuDisplayClass2.b_uu0()中 位于System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)

未解析成员“Newtonsoft.Json.JsonSerializationException,Newtonsoft.Json,版本=7.0.0.0,区域性=中性,PublicKeyToken=30AD4FE6B2A6EED”的类型

所有引用都很好,
Newtonsoft.Json
dll位于输出目录中

有人知道如何让它工作吗

谢谢

史蒂夫

编辑:

公共EFDbContext(字符串名称或连接字符串=“DbConnectionString”):基(名称或连接字符串) { IObjectContextAdapter=this; adapter.ObjectContext.SavingChanges+=objectcontextsonsavingchanges; } /// ///审核记录。 /// ///对象上下文。 公共作废审核记录(ObjectContext ObjectContext) { IEnumerable changes=objectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified); foreach(更改中的ObjectStateEntry StatentryEntity) { 如果(!statentryEntity.IsRelationship&&statentryEntity.Entity!=null&&!(statentryEntity.Entity是AuditEntry)) { AuditEntry audit=CreateAuditRecord(stateEntryEntity,objectContext); this.AuditEntries.Add(审核); } } } /// ///创建审核记录。 /// ///对象状态条目。 ///对象上下文。 ///审计条目。 public AuditEntry CreateAuditRecord(ObjectStateEntry ObjectStateEntry,ObjectContext ObjectContext) { AuditEntry audit=新的AuditEntry(); audit.TableName=objectStateEntry.EntitySet.Name; audit.applicationSerid=用户ID; if(objectStateEntry.State==EntityState.Added) {//添加了一个条目 audit.NewValue=GetEntryValueInString(objectStateEntry,false); audit.Action=AuditAction.Add; } else if(objectStateEntry.State==EntityState.Deleted) {//已删除中的条目 audit.OldValue=GetEntryValueInString(objectStateEntry,true); audit.Action=AuditAction.Delete; } 其他的 {//条目已修改 audit.OldValue=GetEntryValueInString(objectStateEntry,true); audit.NewValue=GetEntryValueInString(objectStateEntry,false); audit.Action=AuditAction.Update; IEnumerable modifiedProperties=objectStateEntry.GetModifiedProperties(); //将不匹配列名称的集合指定为序列化字符串 audit.ChangedColumns=JsonConvert.SerializeObject(modifiedProperties.ToArray()); } 退货审核; } /// ///克隆实体。 /// ///物体。 ///EntityObject。 公共对象克隆性(BaseEntity obj) { 返回JsonConvert.DeserializeObject(JsonConvert.SerializeObject(obj),obj.GetType()); } /// ///获取字符串中的条目值。 /// ///条目。 ///如果设置为true[为原始值]。 ///System.String。 私有字符串GetEntryValueInString(ObjectStateEntry条目,bool isOrginal) { if(entry.Entity是BaseEntity) { 对象目标=克隆实体((BaseEntity)entry.Entity); foreach(entry.GetModifiedProperties()中的字符串propName) { 对象setterValue=null; if(等边) { setterValue=entry.OriginalValues[propName]; } 其他的 { setterValue=entry.CurrentValue[propName]; } PropertyInfo-propInfo=target.GetType().GetProperty(propName); if(setterValue==DBNull.Value) { setterValue=null; } SetValue(target,setterValue,null); } 返回JsonConvert.SerializeObject(目标); } 返回null; }
有一个自引用循环导致了该问题

从seed方法插入的一些基础数据。当我将调试器附加到更新数据库进程时,它实际上给出了正确的异常。在我发布这个问题后用谷歌搜索它之前,我不知道你可以附加一个调试器

用同一个项目打开了第二个Visual Studio,将

if (!System.Diagnostics.Debugger.IsAttached)
    System.Diagnostics.Debugger.Launch();
在ctor中,然后才能看到真正的异常。

“类型未解析”

消息让我觉得它找不到dll

谢谢你的时间


这个问题毫无意义。

那么更新数据库想做什么呢?如果只添加引用的库,为什么要运行它?我已经使用添加迁移添加了一些新迁移,所以运行更新数据库来应用迁移。SavingChanges附带了一个事件,它使用Json.Net serializerOK,您显然在Seed方法中使用Json序列化,您可以显示这一部分吗?我已经编辑了我的问题并添加了OnSavingChanges代码。seed方法确实插入了一些基本数据,然后调用SaveChanges,这将调用invoke OnSavingChanges
if (!System.Diagnostics.Debugger.IsAttached)
    System.Diagnostics.Debugger.Launch();