首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fluent NHibernate DuplicateMappingException和AutoMapping

Fluent NHibernate DuplicateMappingException和AutoMapping
EN

Stack Overflow用户
提问于 2009-08-17 21:09:31
回答 6查看 4.6K关注 0票数 4

摘要:

我想用Fluent NHibernate Automapper保存两个同名和不同名称空间的类

上下文

我写的是,为了测试,必须将许多不同的对象导入数据库。我最终会给一个合适的模型写地图。

我一直在使用代码gen和Fluent NHibernate来获取这些DTO并将它们直接转储到db。

异常说(尝试使用auto=“false”)

代码语言:javascript
复制
public class ClassConvention : IClassConvention
{
    public void Apply(IClassInstance instance)
    {
        instance.Table(instance.EntityType.Namespace.Replace(".", "_"));
    }
}

namespace Sample.Models.Test1
{
    public class Test
    {
        public virtual int Id { get; set; }
        public virtual string Something { get; set; }
    }
}

namespace Sample.Models.Test2
{
    public class Test
    {
        public virtual int Id { get; set; }
        public virtual string SomethingElse { get; set; }        
    }
}

这是实际的应用程序代码

代码语言:javascript
复制
            var model = AutoMap.AssemblyOf<Service1>()
                .Where(t => t.Namespace.StartsWith("Sample.Models"))
                .Conventions.AddFromAssemblyOf<Service1>();
            var cfg = Fluently.Configure()
                .Database(
                MySQLConfiguration.Standard.ConnectionString(
                    c => c.Is("database=test;server=localhost;user id=root;Password=;")))
                .Mappings(m => m.AutoMappings.Add(model))
                .BuildConfiguration();
            new SchemaExport(cfg).Execute(false, true, false);

谢谢,我真的很感谢你的帮助

使用Fluent Nhibernate RC1更新

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-08-19 07:35:56

来自fluent-nhibernate论坛的解决方案”(詹姆斯·格雷戈里)

今晚好好看看这个。基本上,这取决于所提到的异常的AutoImport内容;当给NHibernate第一个映射时,它会看到该实体使用完整的程序集限定名命名,并为短名称创建一个导入(很有帮助!),然后当您添加第二个名称时,它会抱怨这个导入现在将发生冲突。因此,解决方案是关闭汽车进口;不幸的是,我们没有办法在钢筋混凝土.我刚做了一个修正,增加了在约定中改变这种情况的能力。因此,如果您获得了最新的二进制文件或源代码,您应该能够更改您所附项目中的约定行以完成以下操作:

代码语言:javascript
复制
.Conventions.Setup(x =>  {   
  x.AddFromAssemblyOf<Program>();   
  x.Add(AutoImport.Never());  }); 

它添加了在程序集中定义的所有约定,然后使用助手约定之一关闭自动导入。

票数 7
EN

Stack Overflow用户

发布于 2011-05-23 15:44:22

我无法使用用于FluentMappings的约定(与AutoMappings形成对比)使其工作。但是,以下内容对我来说是可行的,尽管它必须在需要时添加到每个ClassMap中。

代码语言:javascript
复制
public class AMap : ClassMap<A> 
{
    public AMap()
    {
        HibernateMapping.Not.AutoImport();
        Map(x => x.Item, "item");
        ...
    }
}
票数 7
EN

Stack Overflow用户

发布于 2010-07-27 08:13:40

我对此有实际的问题,上面的例子或它的任何变体都没有帮助。

var cfg =新的NotifyFluentNhibernateConfiguration();

代码语言:javascript
复制
    return Fluently.Configure()
      .Database(
       FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2005
            .ConnectionString("Server=10.2.65.227\\SOSDBSERVER;Database=NotifyTest;User ID=NHibernateTester;Password=test;Trusted_Connection=False;")
      )

      .Mappings(m => {
          m.AutoMappings
            .Add(AutoMap.AssemblyOf<SubscriptionManagerRP>(cfg));
          m.FluentMappings.Conventions.Setup(x =>
          {
              x.AddFromAssemblyOf<Program>();
              x.Add(AutoImport.Never());
          });
      } )

      .BuildSessionFactory();

我找不到节目的推荐信..。

我还尝试将一个独立的xml文件放到绝望配置中,fluent nhibernate将其映射到auto= false,但没有成功。

我可以有一些更广泛的例子来说明如何做到这一点吗?

编辑,我几周前买了最新的行李箱。

编辑,通过删除所有重复项来解决这个问题。

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

https://stackoverflow.com/questions/1290466

复制
相关文章

相似问题

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