首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharpMap和实体框架:动态程序集中不支持被调用的成员

SharpMap和实体框架:动态程序集中不支持被调用的成员
EN

Stack Overflow用户
提问于 2013-03-10 00:10:15
回答 2查看 6.3K关注 0票数 3

我在一个自定义的"map小部件“组件中使用锐利的地图。要填充映射,我希望使用实体框架,它位于独立的DLL中。如果我创建一个地图,然后获取数据,这就很好了。

代码语言:javascript
复制
public void loadMap() {
     var map = new MapWidget(); // Create a new widget which internally uses SharpMap
     map.AddCountriesLayer(); // Load the map background from .shp file
     var data = new IPService.GetPointsForMap(); // Gets IP address from entity framework, inside "domain.dll"
     map.AddDots(data); // Add dots
}

然而,如果我先得到数据,然后绘制地图,事情就会中断:

代码语言:javascript
复制
public void loadMap() {
     var data = new IPService.GetPointsForMap(); // Accessing entity framework before sharpmap
     var map = new MapWidget();
     map.AddCountriesLayer();
     map.AddDots(data);
}

结果:

代码语言:javascript
复制
   System.NotSupportedException "The invoked member is not supported in a dynamic assembly."
   at System.Reflection.Emit.InternalAssemblyBuilder.GetExportedTypes()     
   at GeoAPI.GeometryServiceProvider.ReflectInstance()     
   at GeoAPI.GeometryServiceProvider.get_Instance()     
   at SharpMap.Data.Providers.ShapeFile.set_SRID(Int32 value) in C:\dev\DLLs\SharpMap Source\Trunk\SharpMap\Data\Providers\ShapeFile.cs:line 859     
   at SharpMap.Data.Providers.ShapeFile.ParseProjection() in C:\dev\DLLs\SharpMap Source\Trunk\SharpMap\Data\Providers\ShapeFile.cs:line 978     
   at SharpMap.Data.Providers.ShapeFile..ctor(String filename, Boolean fileBasedIndex) in C:\dev\DLLs\SharpMap Source\Trunk\SharpMap\Data\Providers\ShapeFile.cs:line 302     
   at Dashboard.Widgets.MapWidget.AddCountriesLayer() in c:\dev\Dashboard\v1\Dashboard\Classes\Widgets\Generic\MapWidget.cs:line 86  

这到底是怎么回事?为什么使用实体框架会首先破坏它呢?

为了解决这个问题,我将其添加到program.cs中,以强制首先加载小部件。

代码语言:javascript
复制
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    // Hack to force SharpMap to register before entity framework
    var widget = new Widgets.MapWidget();
    widget.Update();

    Application.Run(new DashboardForm());
}

然而,我不喜欢它-它似乎相当脆弱,我不喜欢“编码的巧合”。我能做些什么来修复它吗?

注意:

我找到了这篇博文:http://elegantcode.com/2010/01/28/the-entity-framework-and-the-the-invoked-member-is-not-supported-in-a-dynamic-assembly-exception/我将域程序集添加到connectionString中

我的项目结构是:

Dashboard.exe

  • App.Config包含连接字符串
  • 参考文献SharpMap
  • 参考文献Domain.Dll
  • 包含MapWidget

Domain.dll

  • 包含DomainModel和服务
  • 使用实体模型进行持续
  • App.config包含连接字符串、实体框架配置部分和实体框架连接工厂。

所以我的问题是:

  1. 为什么会这样?
  2. 我能做什么来阻止它?(如果不是,是否有比Program.cs更好的地方来处理黑客代码?)

谢谢你的阅读,如果我不清楚的话,请让我澄清一下。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 17:06:06

我有一个非常类似的问题,但我没有使用实体框架(我使用的是NHibernate ),所以,我发现这可能不是一个代理对象问题。

我也不喜欢“巧合编码”,但我假设通过调用new MapWidget(),一些与GeoApi相关的初始化在内部执行--因为GeoApi在内部被SharpMap使用。

在我的例子中,我没有直接使用地图,我只是使用NHibernate将一些地理数据插入到我的数据库中,并且得到了完全相同的堆栈跟踪,所以我认为这可能是同一个问题。

虽然我很讨厌,但我也有过这样的经历:

代码语言:javascript
复制
// my object to be persisted using NHibernate
var myObj = new MyObj();

// add polygon of type GeoAPI.Geometries.IGeometry
myObj.CoveredArea = myGeoFactory.CreatePolygonArea(/* ... */);

// use NHibernate to save my obj
sessioNScope.Save(myObj); // <- throws NotSupportedException here

它给了我和你一样的例外。在把它改为

代码语言:javascript
复制
// Ignore this line: hack to initialize GeoApi
new Map(); 

// my object to be persisted using NHibernate
var myObj = new MyObj();

// add polygon of type GeoAPI.Geometries.IGeometry
myObj.CoveredArea = myGeoFactory.CreatePolygonArea(/* ... */);

// use NHibernate to save my obj
sessioNScope.Save(myObj);

效果很好。在我的例子中,我使用了new Map()而不是new MapWidget(),因为它是一个winforms应用程序。

TLDR:认为它是一个执行初始化的黑客

票数 2
EN

Stack Overflow用户

发布于 2013-03-12 20:51:44

这很可能是因为EF生成的动态代理。我不熟悉SharpMap,所以我不能评论它在EF之前初始化它的效果,但是您应该能够通过禁用代理创建来避免异常:

代码语言:javascript
复制
context.Configuration.ProxyCreationEnabled = false;

请注意,这将禁用延迟加载和更改跟踪,因此首先仔细阅读本文:http://msdn.microsoft.com/en-us/data/jj592886

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15317420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档