Fluent NHibernateで、インターフェイスから継承する抽象クラスから継承するクラスを自動マッピングする方法は?

StackOverflow https://stackoverflow.com/questions/1809909

  •  05-07-2019
  •  | 
  •  

質問

Fluent NHibernateの使用を開始したばかりで、エンティティを自動マップしようとすると次の問題が発生しました:

public interface IDataEntity {}

public abstract class PhysicalEntity : IDataEntity {

         public virtual int Id { get;  set; }
         public virtual string Name { get; set; }
}

public class Mine  : PhysicalEntity {

        public virtual string MineString { get; set; }
}

private static ISessionFactory CreateSessionFactory()
        {
            return Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                .ConnectionString(c => c.FromConnectionStringWithKey("CSMID_FNH")))
                .Mappings(m =>
                m.AutoMappings.Add(
                AutoMap.AssemblyOf<Mine>()
                .Where(t => t.Namespace == "DAL.DomainModel" && t.IsClass && !t.Name.EndsWith("Attribute") )
                .IgnoreBase<PhysicalEntity>()))
                .ExposeConfiguration(BuildSchema)
                .BuildSessionFactory();
        }

IDataEntityインターフェイスへの参照を削除すると、自動マッピングが機能します。インターフェイスにIDフィールドを挿入しようとしましたが、これにより、NHibernateランタイムエラーが発生します。これは、自動マップにIDataEntityタイプを無視するように指示するためです。ここで何が欠けていますか?ドメイン内のすべてのクラスがIDataEntityから継承することを本当に望んでいます。

役に立ちましたか?

解決

わかりましたので、答えがあると思います。

やらなければならなかったのは、IDataEntityを次のように変更することだけでした。

パブリックインターフェイスIDataEntity     {         int Id {get; }     }

最初にgetとsetでこれを試しましたが、抽象クラスが保護されたセットを使用し、インターフェイスから継承できなかったため、問題が発生しました。インターフェースからセッターを外すことは今のところ機能しているように見えますが、うまくいけば他の問題を引き起こさないことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top