Как заставить Fluent NHibernate автоматизировать класс, унаследованный от абстрактного класса, унаследованного от интерфейса? - PullRequest
2 голосов
/ 27 ноября 2009

Я только начал использовать 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, автопоказ работает. Я попытался вставить поле идентификатора в интерфейс, однако это привело к ошибке времени выполнения NHibernate, как и указание автоматической карте игнорировать тип IDataEntity. Что мне здесь не хватает? Мне бы очень хотелось, чтобы все классы в моем домене наследовались от IDataEntity.

1 Ответ

2 голосов
/ 28 ноября 2009

Хорошо, так что я думаю, что у меня есть ответ.

Все, что мне нужно было сделать, это изменить мою IDataEntity следующим образом:

открытый интерфейс IDataEntity { int Id {get; } }

Я бы попробовал это изначально с get и set, но тогда у меня возникли бы проблемы, потому что мой абстрактный класс использовал защищенный набор и не мог наследовать от интерфейса. Похоже, что пока не работает сеттер из интерфейса, надеюсь, он не вызовет каких-либо других проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...