C# 建议:CLR类型到EDM类型的映射不明确,因为多个CLR类型与EDM类型匹配

C# 建议:CLR类型到EDM类型的映射不明确,因为多个CLR类型与EDM类型匹配,c#,entity-framework,poco,dbcontext,edmx,C#,Entity Framework,Poco,Dbcontext,Edmx,我有一个数据库,有超过100个涉猎者。我决定将EF模型分为三个不同的模型。有多个表出现在多个模型中。在使用EF5.xDBContext生成器之后,我得到了POCO类 此模板生成重复类(出现在多个模型中的类),但命名空间不同。尝试查询其中一个后,我出现以下错误: The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 面对这个问题后,我相信我有两个选择: 编辑CS

我有一个数据库,有超过100个涉猎者。我决定将EF模型分为三个不同的模型。有多个表出现在多个模型中。在使用EF5.xDBContext生成器之后,我得到了POCO类

此模板生成重复类(出现在多个模型中的类),但命名空间不同。尝试查询其中一个后,我出现以下错误:

The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type
面对这个问题后,我相信我有两个选择:

  • 编辑CSDL、MSL、SSDL文件以重命名实体。在本例中,我将把上下文名称作为前缀附加到实体中
  • 编辑EF 5.x DbContext生成器以编辑将生成的POCO类的名称。在本例中,我还将把上下文名称作为前缀附加到POCO类中

  • 我的问题是:我应该遵循哪种选择?根据所选选项,我需要做什么。如果没有一个选项是有效的,您建议我怎么做?

    如果您编辑t4模板(选项2),所有课程都将受到影响。通过编辑类名(您可以在设计器曲面中执行此操作),您只能更改在更多上下文中常见的类


    因此,如果重叠类很少,我会选择选项1。我在一个类似的场景中也这样做,其中一些表包含在多个上下文(业务、授权、报告等)中,并且只有类具有其原始名称的上下文用于该类上的CUD操作。此外,我不希望所有的类都有前缀

    如果编辑t4模板(选项2),所有类别都将受到影响。通过编辑类名(您可以在设计器曲面中执行此操作),您只能更改在更多上下文中常见的类


    因此,如果重叠类很少,我会选择选项1。我在一个类似的场景中也这样做,其中一些表包含在多个上下文(业务、授权、报告等)中,并且只有类具有其原始名称的上下文用于该类上的CUD操作。此外,我不希望所有的类都有前缀

    我删除了.edmx文件并重新创建了它。

    这就解决了问题。不确定这是否有帮助。

    我删除了.edmx文件并重新创建了它。

    这就解决了问题。不确定这是否对您有帮助。

    这个问题没有“最佳”答案。您必须找到最适合您需要的解决方案。你们并没有提到的另一个方法是修改生成器,使其不再创建已经存在的类。我知道这个问题并没有具体的答案,但任何建议都会有所帮助。您知道如何编辑DbContext生成器模板,使其不会创建已经存在的类吗?我试图找出它,但完全无法理解模板背后的代码。对于这个问题没有“最佳”答案。您必须找到最适合您需要的解决方案。你们并没有提到的另一个方法是修改生成器,使其不再创建已经存在的类。我知道这个问题并没有具体的答案,但任何建议都会有所帮助。您知道如何编辑DbContext生成器模板,使其不会创建已经存在的类吗?我试图找出它,但完全无法理解模板背后的代码。这个解决方案似乎非常有用,但我仍然要面对另一个问题。因为我将db模型分为三个不同的模型,所以我在csdl文件中使用“using namespace”来引用另一个模型的实体。有了这个,我无法重命名实体的名称,因为它们与其他模型中的名称不匹配。有什么想法吗?(由于性能原因,我拆分了模型,我不知道这是否适用于EF 5)这听起来像是你不应该做的事情。我们在同一条轨道上吗?比如说,我说的是业务上下文中的
    用户
    实体和授权上下文中的
    授权用户
    实体。两者都对应于同一张桌子,但除此之外,它们之间没有任何关系。我理解你。对我来说,你建议我做什么?我在这方面已经研究了好几天,没有找到任何解决方案。我会重命名几个常见的类,让它们每个都有一个主上下文,并在其他上下文中有一个只读函数。在我找到这个问题的解决方案的过程中,我将每个模型放在不同的程序集中,这样就不会有重复的类。进行此更改后,我遇到了以下错误:DbContext类不能用于每个类型具有多个实体集(MEST)的模型。我需要停止使用DbContext和POCO吗?这个解决方案似乎非常有用,但我仍然要面对另一个问题。因为我将db模型分为三个不同的模型,所以我在csdl文件中使用“using namespace”来引用另一个模型的实体。有了这个,我无法重命名实体的名称,因为它们与其他模型中的名称不匹配。有什么想法吗?(由于性能原因,我拆分了模型,我不知道这是否适用于EF 5)这听起来像是你不应该做的事情。我们在同一条轨道上吗?比如说,我说的是业务上下文中的
    用户
    实体和授权上下文中的
    授权用户
    实体。两者都对应于同一张桌子,但除此之外,它们之间没有任何关系。我理解你。对我来说,你建议我做什么?我已经在这个问题上苦思冥想了好几天,没有找到任何解决方案。我会重命名几个常见的类,让它们每个都有一个主上下文,在其他上下文中有一个只读函数。在我找到这个问题的解决方案的过程中,我将每个模型放在不同的程序集中,这样就不会重复