ActiveRecord не будет загружать типы из сборки в GAC - PullRequest
1 голос
/ 23 ноября 2010

Я бы хотел поэкспериментировать с ActiveRecord для его великолепного управления областью сеансов / транзакций и его хорошей стратегией отображения атрибутов. Я обычно использую Nhibernate + Fluent Nhibernate для создания моего DAL.

Я застрял в этой странной проблеме: ActiveRecord не хочет загружать мои типы из сборки, которая находится в GAC ... в то время как FluentNhibernate может. Вот код инициализации ActiveRecord, который терпит неудачу:

IDictionary properties = new Dictionary(); properties.Add("connection.driver_class", "NHibernate.Driver.SqlClientDriver"); properties.Add("dialect", "NHibernate.Dialect.MsSql2005Dialect"); properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider"); properties.Add("connection.connection_string", "MY_CONNECTION_STRING"); properties.Add("proxyfactory.factory_class", typeof(NHibernate.ByteCode.Castle.ProxyFactoryFactory).AssemblyQualifiedName); InPlaceConfigurationSource source = new InPlaceConfigurationSource(); source.Add(typeof(ActiveRecordBase), properties);</p> <p>ActiveRecordStarter.Initialize( source, typeof(Person), typeof(Car) );

Сборка, которая содержит «Person» и «Car», находится в GAC, в то время как Fluent Nhibernate может загрузить его (даже в ленивых коллекциях), ActiveRecord не может загрузить и выдает следующее исключение:

à NHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked(String fullName, String errorMessage) à NHibernate.Cfg.XmlHbmBinding.Binder.ClassForNameChecked(String name, Mappings mappings, String errorMessage) à NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindClass(XmlNode node, IDecoratable classMapping, PersistentClass model, IDictionary<code>2 inheritedMetas) à NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(XmlNode node, HbmClass classSchema, IDictionary 2 наследственных мета) NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses (XmlNode parentNode, IDictionary`2 наследуемый метас) NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind (узел XmlNode) NHibernate.Cfg.Configuration.AddValidatedDocument (NamedXmlDocument doc)

постоянный класс CFM.SearchServices.Finder.DAL.Entities.Person, CFM.SearchServices.Finder не найден

Есть ли способ заставить ActiveRecord дать полностью определенные имена NHibernate?

1 Ответ

0 голосов
/ 23 ноября 2010

К сожалению, нет, в настоящий момент ActiveRecord явно генерирует имена типов без информации о версии и открытом ключе, как вы можете видеть в источнике метода MakeTypeName() здесь: https://github.com/castleproject/Castle.ActiveRecord/blob/master/src/Castle.ActiveRecord/Framework/Internal/Visitors/XmlGenerationVisitor.cs#L1398

Конечно, вы можете просто создать свою собственную сборку ActiveRecord, которая создает полные имена типов, скачать исходный код по адресу https://github.com/castleproject/Castle.ActiveRecord/archives/master, измените метод MakeTypeName() для создания полностью определенных имен типов и перестройки / запуска тестов.

...