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

如何告诉fluet nhibernate使用来自基类的ID(在映射中是抽象的和被忽略的)

  •  2
  • Nour  · 技术社区  · 15 年前

    我上的是抽象课

    public abstract class Document
    {  
    public int DocumentID {get; set;}
    }
    

    和派生类

    public class DoctorDocument : Document{
    public string DoctorName {get;set;}
    }
    

    我正在使用流畅的自动映射,
    我不需要为文档创建一个表,但是我需要每个派生类将documentid作为主键。

     mappings.IgnoreBase<Document>();
     mappings.AddEntityAssembly(typeof(DoctorDocument).Assembly);
     mappings.Setup(c=>c.FindIdentity = type.Name == type.DeclaringType.Name + "ID";);
    

    但它仍然找不到ID,并告诉我DoctorDocument没有ID。 但当我进行以下覆盖时,它起作用了:

    public class DoctorDocumentMap: IAutoMappingOverride<DoctorDocument>
        {
        public void Override(AutoMapping<DoctorDocument> mapping)
            {
            mapping.Id(x => x.Id, "DocumentID").GeneratedBy.Identity();
            }
    }
    

    我如何才能告诉自动应用程序为所有实体执行此操作??尤其是generatedby.identity();

    1 回复  |  直到 14 年前
        1
  •  2
  •   Iyad    14 年前

    覆盖默认自动应用配置可能会有所帮助。

    类似的事情可能会奏效:

    public class MyAppAutoConfiguration : DefaultAutomappingConfiguration
    {
        public override bool IsId(Member member)
        {
            return "DocumentID" == member.Name;
        }
    }
    

    配置可以如下所示:

     var cfg = new MyAppAutoConfiguration();
            var autoPersistenceModel = AutoMap.AssemblyOf<Person>(cfg).IgnoreBase<Document>();
            ISessionFactory sessionFactory = Fluently.Configure()
                .Database(OracleClientConfiguration.
                Oracle10.ConnectionString(
                    ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString))
                 .Mappings(m =>
                    m.AutoMappings
                      .Add(autoPersistenceModel))
                  .BuildSessionFactory();
    
    推荐文章