как указать flunet-nhibernate использовать идентификатор из базового класса (который является абстрактным и игнорируется при отображении)

у меня есть абстрактный класс

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

и производный класс

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

и я использую Fluent Auto Mapping,
мне не нужно создавать таблицу для документа, но мне нужно, чтобы каждый производный класс получал DocumentID в качестве первичного ключа.

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

но он все еще не может найти идентификатор и говорит мне, что у DoctorDocument нет идентификатора. но когда я сделал следующее переопределение, это сработало:

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

как я могу сказать автоматическому сопоставлению сделать это для всех сущностей?? особенно GeneratedBy.Identity();


person Nour    schedule 14.08.2010    source источник


Ответы (1)


Переопределение DefaultAutomappingConfiguration может помочь.

Что-то вроде этого может сработать:

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();
person Iyad    schedule 28.08.2010
comment
Спасибо, iyad, но я понял, что DefaultAutomappingConfiguration находится в новой версии 1.1, а я использую 1.0, а IsId равен FindIdentity. - person Nour; 30.08.2010