2

私は抽象クラスを持っています

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

4

1 に答える 1

2

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();
于 2010-08-28T22:07:11.830 に答える