1

我有一个简单的 SharePoint 2010 BCS 解决方案,我在其中定义了两个实体以及它们之间的简单父子关系。我碰巧在我的服务类(和)的单独程序集中有实体类(和Parent)。仅使用 Finder 和 SpecificFinder 方法时,这似乎没有问题,但是当我尝试执行 AssociationNavigator 方法时,它失败了。当我的实体类型与 BCS 模型定义在同一个程序集中并关联服务类时,AssociationNavigator 工作正常。我这样称呼 AssociationNavigator:ChildParentServiceChildService

var entity_instance_collection = new EntityInstanceCollection(1);
entity_instance_collection.Add(parent_entity_instance);
var association = (IAssociation)parent_entity.GetMethodInstance("ParentToChildAssociationNavigator", MethodInstanceType.AssociationNavigator);
var child_items = child_entity.FindAssociated(entity_instance_collection, association, lobi);

当实体类型位于单独的程序集中时,我在尝试执行时收到 InvalidMetadataObjectException FindAssociated

无法在名称空间“BdcModelProject2.BdcModel1”中名称为“Parent”的实体(外部内容类型)上名称为“ReadItem”的方法上的名称为“parent”的参数上的 TypeDescriptor TypeName“BdcModelProject2.BdcModel1.Parent、BdcModel1”所描述的类型。

有了这个 InnerException:

无法从程序集“BdcModelProject2,版本=1.0.0.0,文化=中性,PublicKeyToken=50bc5a1f7318bdeb”加载类型“BdcModelProject2.BdcModel1.Parent”。

因此,似乎我的应用程序只是试图从定义 BCS 模型的程序集 (BdcModelProject2) 而不是实际定义我的实体的程序集 (ClassLibrary1) 加载我的实体类型。我对此有几点困惑:

  1. 我看到 BCS 模型在 TypeDescriptors 中具有 TypeName 属性,这些属性描述了实现实体类的类的类型,但是即使在此处提供了乱码,Finder 和 SpecificFinder 方法似乎对我来说也能正常工作,但 AssociationNavigator 无法加载类型。为什么是这样?
  2. 我在 Visual Studio 生成的 bdcm 文件或 MSDN 文档中的任何地方都看不到TypeDescriptor指示可以为实体类型指定程序集名称的位置。

那么,当这些实体在不同的程序集中定义时,如何在 BCS 项目中使用实体类型?

4

1 回答 1

0

这里有两种可能:

  • 它没有找到dll
  • 它会找到旧版本的 dll,其中不包含您正在使用的新代码

我们经常遇到 GAC 中存在旧版本的问题。当 bin 目录中安装了新版本时,它会忽略它并继续使用 GAC 中的版本。然后你在 GAC 中删除版本,但它仍然不起作用,因为它已经缓存了旧版本。最后,IIS 重置或机器重新启动使其正常工作。

简短回答:尝试在机器上找到旧版本的 dll。

编辑

您可以使用像Assembly Binding Log Viewer这样的工具来追踪问题。

见: http: //msdn.microsoft.com/en-us/library/e74a18c4 (v=vs.90).aspx

于 2012-04-16T19:03:17.043 回答