Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 映射被看似无关的代码清除? Mapper.CreateMap(); var test1=Mapper.FindTypeMapFor()//这成功了 var foos=db.foos.ToList(); var test2=Mapper.FindTypeMapFor()//这将返回null_C#_Automapper - Fatal编程技术网

C# 映射被看似无关的代码清除? Mapper.CreateMap(); var test1=Mapper.FindTypeMapFor()//这成功了 var foos=db.foos.ToList(); var test2=Mapper.FindTypeMapFor()//这将返回null

C# 映射被看似无关的代码清除? Mapper.CreateMap(); var test1=Mapper.FindTypeMapFor()//这成功了 var foos=db.foos.ToList(); var test2=Mapper.FindTypeMapFor()//这将返回null,c#,automapper,C#,Automapper,为什么对ToList的调用(如果我删除了ToList,它工作得很好)会导致映射不再存在?这里没有太多的事情要做;我在我的机器上设置了一个简单的实现,它工作得很好。我的最佳猜测是,您的模型稍微复杂一些,EF查询有一个副作用,即动态生成一个或多个派生自Foo的类型,而AutoMapper不知道如何映射到Bar。ToList()的意义在于它运行的查询被推迟到现在。尝试设置 Mapper.CreateMap<Foo,Bar>(); var test1 = Mapper.FindTypeMap

为什么对ToList的调用(如果我删除了ToList,它工作得很好)会导致映射不再存在?

这里没有太多的事情要做;我在我的机器上设置了一个简单的实现,它工作得很好。我的最佳猜测是,您的模型稍微复杂一些,EF查询有一个副作用,即动态生成一个或多个派生自Foo的类型,而AutoMapper不知道如何映射到Bar。
ToList()
的意义在于它运行的查询被推迟到现在。尝试设置

Mapper.CreateMap<Foo,Bar>();
var test1 = Mapper.FindTypeMapFor<Foo,Bar>(); //this succeeds
var foos = db.Foos.ToList();
var test2 = Mapper.FindTypeMapFor<Foo,Bar>(); //this returns null 

在运行查询之前,查看是否仍然发生这种情况。

您是否使用L2S、EF或其他工具?框架版本、自动映射版本等可能有用。db.Foos首先是实体框架代码。Automapper v2.0.0.232通过NuGet安装。您的简单示例适用于我的机器,因此您省略了相关细节。尝试创建一个独立的可复制示例并重新发布。即使ToList生成了派生类型,在这段代码中,我甚至没有尝试转换Foos。我根本没有将
foos
传递给AutoMapper,所以它真的不应该被涉及。我调用FindTypeMapFor是为了证明映射正在以某种方式被删除。我必须保存从CreateMap到类的实例属性的映射,以确保它不会消失。我不知道如果我没有引用它,它是否会被垃圾收集起来。我想我可以查找FindTypeMapFor的源代码,看看它引用的是什么集合。不过我会试试你的建议,看看效果如何。
db.Configuration.ProxyCreationEnabled = false;