代码之家  ›  专栏  ›  技术社区  ›  grenade

(fluent)nhibernate条件表映射策略

  •  1
  • grenade  · 技术社区  · 16 年前

    • 城市档案
      • 身份证件
      • 名称
      • 名称

    我有一个.Net枚举和类来封装这个批:

    public enum Scope { Region, Country, City }
    
    public class Profile {
        public Scope Scope { get; set; }
        public int Id { get; set; }
        public string Name { get; set; }
    }
    

    public class ProfileMap : ClassMap<Profile> {
        public ProfileMap() {
            switch (x => x.Scope) { // <--Invalid code here!
                case Scope.City: Table("CityProfile"); break;
                case Scope.Country: Table("CountryProfile"); break;
                case Scope.Region: Table("RegionProfile"); break;
            }
            Id(x => x.Id);
            Map(x => x.Name);
        }
    }
    

    或者是我搞错了?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Lachlan Roche    16 年前

    假设数据库模式是固定的,我会将它们映射为3个独立的类,并将它们映射为公共接口 any 参考文献。

    class Foo
    {
        public virtual IProfile Profile { get; set; }
    }
    
    public class FooMap : ClassMap<Foo>
    {
        public FooMap()
        {
            ReferencesAny(m => m.Profile)
                .EntityTypeColumn("ProfileType")
                .EntityIdentifierColumn("ProfileId")
                .AddMetaValue<CityProfile>("CityProfile")
                .AddMetaValue<CountryProfile>("CountryProfile")
                .AddMetaValue<RegionProfile>("RegionProfile")
                .IdentityType<int>();
        }
    }
    
    推荐文章