【问题标题】:NHibernate DuplicateMappingException when two classes have the same name but different namespacesNHibernate DuplicateMappingException 当两个类具有相同的名称但不同的命名空间
【发布时间】:2010-11-12 11:30:41
【问题描述】:

我的域模型根目录中有一个类,如下所示:

namespace Domain
{
  public class Foo { ... }
}

我在不同的命名空间中还有另一个同名的类:

namespace Domain.SubDomain
{
  public class Foo { ... }
}

对于我的映射,我有一个 Mapping 目录和一个名为 SubDomain 的子目录,其中包含在 Domain.SubDomain 命名空间中找到的域类的映射。它们都在同一个程序集中。

但是,当我尝试使用 NHibernate 加载它们时,我不断收到 DuplicateMappingException... 即使两个 Foo 具有不同的命名空间。我用来加载我的 NHibernate 配置的代码是这样的:

var cfg = new Configuration()
  .Configure()                
  .AddAssembly("Domain");   

如何告诉 NHibernate 让我使用两个具有相同名称(但名称空间不同)的实体?

【问题讨论】:

标签: c# .net nhibernate orm nhibernate-mapping


【解决方案1】:

我在 Hibernate 网站上找到了answer

如果你有两个持久类 使用相同的非限定名称,您 应该设置auto-import="false"。一个 如果您尝试将导致异常 将两个类分配给同一个 “进口”名称。

我将它用作<hibernate-mapping> 标签的属性,它起作用了。

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。我是这样解决的:

    Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                    .ConnectionString(...)
                    .AdoNetBatchSize(500))
                .Mappings(m => m.FluentMappings
                    .Conventions.Setup(x => x.Add(AutoImport.Never()))
                    .AddFromAssembly(...)
                    .AddFromAssembly(...)
                    .AddFromAssembly(...)
                    .AddFromAssembly(...))
                ;
    

    导入的部分是:.Conventions.Setup(x => x.Add(AutoImport.Never()))。 使用此配置似乎一切正常。

    【讨论】:

    • 能否请您添加对此设置使用的表名的解释。谢谢。
    • 表名?默认情况下,类名是我的表名。但是,可以单独指定。
    【解决方案3】:

    您可以像这样在映射文档中指定类的完全限定名称:

    <class name="SeeMe.Data.People.Relationship, SeeMe.Data" ... > ...
    

    SeeMe.Data 是程序集。

    【讨论】:

    • 仍然说:NHibernate.DuplicateMappingException: duplicate import: Foo refers to both Domain.SubDomain.Foo, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null and Domain.Foo, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (try using auto-import="false")
    • 该死,我一复制粘贴就看到了auto-import="false" 的建议……它奏效了。
    • 呵呵说,nHibernate 摇滚,但我觉得它不是很直观。我花了很多时间来解决一些愚蠢的映射问题。
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多