Tag: circular reference

AutoMapper:PreserveReferences和MaxDepth有什么区别?

我有点困惑。 我无法找出PreserveReferences和MaxDepth之间的区别。 假设我们有以下DTO和模型。 public class PersonEntity { public PersonEntity InnerPerson { get; set; } } public class PersonModel { public PersonModel InnerPerson { get; set; } } 如文档中所述: 以前,AutoMapper可以通过跟踪映射的内容来处理循环引用,并在每个映射上检查源/目标对象的本地哈希表,以查看该项是否已映射。 事实certificate,这种跟踪非常昂贵,您需要使用PreserveReferences选择使用圆形贴图才能工作。 或者,您可以配置MaxDepth。 我的映射: cfg.CreateMap().MaxDepth(1); cfg.CreateMap(); 程序: var personModel = new PersonModel(); personModel.InnerPerson = personModel; var entity = Mapper.Map(personModel); 这就是我期望得到的: 这就是我实际得到的: 我可以使用它们( PreserveReferences和MaxDepth )来解析循环引用,但我没有看到区别。 什么时候我应该在MaxDepth方法中使用不同的深度? 那么,有人能提供吗? 提前致谢。

使用EntityObjects进行Ajax绑定的Telerik MVC Grid获取循环引用exception

我一直在使用Telerik MVC Grid已经有一段时间了,它是一个很棒的控件,然而,一个令人讨厌的事情仍然表现在与使用Ajax绑定到从Entity Framework创建和返回的对象的网格相关。 实体对象具有循环引用,当您从Ajax回调返回IEnumerable时,如果存在循环引用,则会从JavascriptSerializer生成exception。 发生这种情况是因为MVC Grid使用的是JsonResult,后者又使用不支持序列化循环引用的JavaScriptSerializer。 我对此问题的解决方案是使用LINQ创建没有相关实体的视图对象。 这适用于所有情况,但需要创建新对象以及将数据复制到实体对象或从实体对象复制到这些视图对象。 没有很多工作,但这是工作。 我终于想出了如何一般地使网格没有序列化循环引用(忽略它们),我想为大众分享我的解决方案,因为我认为它是通用的,并且很好地插入环境。 该解决方案有几个部分 使用自定义序列化程序交换默认网格序列化程序 安装Newtonsoft提供的Json.Net插件(这是一个很棒的库) 使用Json.Net实现网格序列化器 修改Model.tt文件以在导航属性前插入[JsonIgnore]属性 覆盖Json.Net的DefaultContractResolver并查找_entityWrapper属性名称以确保它也被忽略(由poco类或entity framework注入包装器) 所有这些步骤本身都很容易,但如果没有所有这些步骤,你就无法利用这种技术。 一旦正确实现,我现在可以轻松地将任何entity framework对象直接发送到客户端,而无需创建新的View对象。 我不推荐每个对象,但有时它是最好的选择。 同样重要的是要注意,任何相关的entires都不在客户端,因此不要使用它们。 以下是所需的步骤 在您的应用程序中的某个位置创建以下类。 此类是网格用于获取json结果的工厂对象。 这将很快添加到global.asax文件中的telerik库中。 public class CustomGridActionResultFactory : IGridActionResultFactory { public System.Web.Mvc.ActionResult Create(object model) { //return a custom JSON result which will use the Json.Net library return new CustomJsonResult { Data = […]

两个.net程序集之间的循环引用

我有两个组件A和B. A现有对B的引用,必须保持这种方式。 现在我对B进行了一些需要引用A的更改。因此发生了循环引用。 一点细节: A有一些属性网格,需要托管B中的对话框。 因此,为了避免这个循环引用问题,我尝试在A&B都引用的第三个程序集中定义网格的接口,并且使B仅引用接口。 我面临的两个问题: 在A中定义的网格内部有太多自定义数据类型(特定属性),我必须为每个网格定义接口。 我看到这个例子与函数参数一起工作,例如通过传入的接口调用目标函数。但考虑到下面的代码,它将如何适合 – 我不能新建一个ICustomPropertyGridWrapper … object = new CustomPropertyGridWrapper(…) m_property.SelectedObject = object;

解决循环引用(C#)

我在循环引用/依赖方面遇到了一些问题,我一整天都在这里。 我的思维过程肯定是错的,我只是不明白。 这是我的项目: Flip.Main (ASP.NET MVC) Flip.Domain (C# DLL) Flip.Services (C# DLL) Flip.Utility (C# DLL) 当前参考/依赖: Flip.Main -> Flip.Domain, Flip.Services, Flip.Utility Flip.Services -> Flip.Domain, Flip.Utility Flip.Domain -> Flip.Utility 我想以我的服务项目拥有所有服务的方式构建我的项目,我的域项目模型,存储库和’流利’扩展来查询模型,主要和实用程序项目几乎是自我解释。 遇到的问题: 1)我的Flip.Services项目中有一个EmailService,需要发送本地化的电子邮件。 所有本地化都在Flip.Main的App_GlobalResources中完成。 不知道如何将强类型电子邮件和其他本地化资源现在提供给我的服务层,因为Flip.Main已经依赖于服务层,因此我可以让它依赖于Main项目。 2)我有业务类,例如CustomerSearchFilter,它代表强类型搜索查询。 我想在Flip.Domain项目之外的那些业务类,因为它们不是域模型的一部分。 但是,在我的CustomerSearchFilter类中,我有域类实例(例如CustomerGroup),因此需要了解域类。 同时我的Flip.Domain项目中的Fluent接口需要知道CustomerSearchFilter是什么,所以我可以将它应用到我的IQueryable接口。 再次循环引用。 3)我有一个自定义[AuthorizeSessionState]属性,我用它来装饰我的ASP.NET MVC Flip.Main项目中的特定控制器动作。 这是一个ActionFilterAttribute,需要实例化驻留在Flip.Services项目中的SessionService。 我不能把它放到我的Utility类中(因为Flip.Services已经引用了Flip.Utility)。 我不认为他们应该在Flip.Main中 – 我是否必须为此制作另一个项目!? (另外20个) 我觉得我在某个地方犯了一个错误,特别是当我读到别人通常不会遇到循环引用问题时。 救命?

c#:实用程序以正确的顺序查找循环引用/编译?

任何人都知道一个好的实用程序或程序来询问所有项目的解决方案或目录,并告诉你循环引用的位置,并可能按顺序编译。 我记得前一段时间见过但我在任何地方都找不到它..

如何在处理Json时修复循环引用错误

这个问题是我在这里的原始post的一部分获取数据到Extjs GridPanel 下面是我的控制器从sql db读取数据然后我试图将结果编码为JSON并将数据发送回我的gridview.js public JsonResult writeRecord() //public string writeRecord() { Response.Write(“Survey Completed!”); SqlConnection conn = DBTools.GetDBConnection(“ApplicationServices2”); string sqlquery = “SELECT Q1, Q2, Q3, Q4, Improvements, Comments FROM myTable”; SqlDataAdapter cmd = new SqlDataAdapter(sqlquery, conn); DataSet myData = new DataSet(); cmd.Fill(myData, “myTable”); conn.Open(); conn.Close(); return Json(myData, JsonRequestBehavior.AllowGet); //return myData.GetXml(); } 这就是问题所在,使用上面的代码,我在执行gridview.js时得到的gridview表没有数据,但如果我直接访问我的控制器的方法就像这样 http://localhost:55099/GridView/writeRecord 我收到这个错误, 序列化“System.Globalization.CultureInfo”类型的对象时检测到循环引用。 描述:执行当前Web请求期间发生未处理的exception。 […]

使用Automapper导致堆栈溢出的循环引用

我正在使用Automapper将我的NHibernate代理对象(DTO)映射到我的CSLA业务对象 我正在使用Fluent NHibernate来创建映射 – 这工作正常 我遇到的问题是Order有一个OrderLines集合,每个OrderLines都有一个对Order的引用。 public class OrderMapping : ClassMap { public OrderMapping() { // Standard properties Id(x => x.OrderId); Map(x => x.OrderDate); Map(x => x.Address); HasMany(x => x.OrderLines).KeyColumn(“OrderId”).Inverse(); Table(“`Order`”); } } public class OrderDTO { // Standard properties public virtual int OrderId { get; set; } public virtual DateTime OrderDate { get; set; […]