代码之家  ›  专栏  ›  技术社区  ›  Richard Neil Ilagan

NHibernate:将多个列映射到单个集合中

  •  1
  • Richard Neil Ilagan  · 技术社区  · 14 年前

     ID(pk) | HOME_EMAIL | WORK_EMAIL | OTHER_EMAIL
    -------------------------------------------------
    

    以及.NET类

    class A {
        int id;
        List<MyEmail> emails;
    }
    
    class MyEmail {
        string email;
    }
    

    我想在NHibernate中没有办法将这些(多个)列映射到一个集合中,是吗?:)

    到了一个地步,我们宁愿不再修补数据库模式,所以我们不能做太多的数据库,如果这有帮助的话。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Christoph Jonathan    14 年前

    我建议使用接口,这样您就可以这样做

     interface IUser
    {
        int Id {get; set;}
        IEnumerable<string> Emails {get;}
    }
    
    class MyUser : IUser
    {
        public int Id {get; set;}
        public IEnumerable<string> Emails
        {
            get
            {
                return new [] { SomeEmail, SomeOtherEmail };
            }
        }
    
        public string SomeEmail { get; set; }
        public string SomeOtherEmail { get; set; }
    }
    

    你的应用程序可以期待一个IUser,而不关心我们从哪里得到的电子邮件列表。您可以在NH中映射MyUser,而应用程序并不(也不应该)关心实际的实现。

        2
  •  1
  •   Michael Shimmins    14 年前

    EmailAddresses 它包含三个属性:

    public class EmailAddresses
    {
        public virtual string Home { get; set; }
        public virtual string Work { get; set; }
        public virtual string Other { get; set; }
    }
    

    public class MyUser
    {
        ...
        public virtual EmailAddresses { get; set; }
    }
    

    你可以在NHibernate中使用 components Fluent NHibernate ComponentMap<T> 类映射(automapper不能做组件)。

        3
  •  0
  •   Owen Pauling tmatuschek    9 年前

    有一个功能非常接近你想要的, <dynamic-component>

    http://nhibernate.info/doc/nh/en/index.html#components-dynamic