Свободное автоматическое сопоставление nHibernate - проблема с переопределением автоматического сопоставления - PullRequest
0 голосов
/ 20 июня 2011

Я только что попытался запустить проект с помощью Fluent Automapping (я знаком с Fluent, но писал для каждой карты)

У меня есть объект ScriptType, у которого есть свойство ParseRules

public class ScriptType : EntityBase
{
    public virtual string Name { get; set; }
    public virtual IList<ParseRule> ParseRules { get; set; }
}

Это автоматическое сопоставление с HasMany, и мне нужны ссылки.

Поэтому я добавил переопределение AutoMapping в другую сборку ...

public class ScriptTypeOverride : IAutoMappingOverride<ScriptType>
{
    public void Override(AutoMapping<ScriptType> mapping)
    {
        mapping.References(x => x.ParseRules);
    }
}

И изменил мою конфигурацию так ...

return configuration
            .Mappings(m => m.AutoMappings
                               .Add(AutoMap.AssemblyOf<DatabaseInfo>()
                                        .IgnoreBase<EntityBase>()
                                        .Conventions.AddFromAssemblyOf<KeyConvention>()
                                        .UseOverridesFromAssemblyOf<ScriptTypeOverride>()));

Но я понял ....: (

Ассоциация из таблицы ScriptType ссылается на не отображенный класс: System.Collections.Generic.IList`1 [[GIT.ScriptWizard.Entities.ParseRule ...

Может кто-нибудь помочь, пожалуйста?

1 Ответ

4 голосов
/ 20 июня 2011

References для создания много-к-одному отношения между двумя сущностями, и применяется на «много сторон». Вы ссылаетесь на один другой сущность, поэтому вы используете References метод. HasMany является "другой стороной" References отношения, и получает наносится на «одну сторону».

С Сайт Свободного .

Как должны работать ваши отношения? Он выглядит как классический ScriptType-ко-многим ParseRules, так что это должно быть HasMany на стороне ScriptType, как это делает Fluent.

Возможно, если вы хотите иметь двунаправленное отношение здесь, где сторона ParseRule является «владельцем» стороны отношения, вы должны использовать Inverse() в ScriptType.ParseRules переопределении отображения.

...