如何告诉flunet-nhibernate使用基类中的ID(这是抽象的并在映射中被忽略)

时间:2010-08-14 06:32:58

标签: fluent-nhibernate automapping

我有一个抽象类

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

和派生类

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

我正在使用Fluent Auto Mapping,
我不需要为Document创建一个表,但我需要每个派生类将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 个答案:

答案 0 :(得分:2)

覆盖默认自动播放器配置可能会有所帮助。

这样的事可能有用:

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();