NHibernate отображение словаря в базу данных SQL - PullRequest
1 голос
/ 10 мая 2010

У меня есть класс, созданный в коде, и он добавлен в мою диаграмму классов. Диаграмма классов используется генератором текстовых шаблонов для генерации кода из этой диаграммы классов. Я пытаюсь сопоставить словарь с базой данных sql с помощью NHibernate, сгенерированное отображение выглядит нормально для меня, но свойство класса, как показано ниже, доставляет мне проблемы.

Это собственность;

[Map(2, Name = "QuantityIdentifiers", Table = "PluginProduct_QuantityIdentifiers")]
        [Key(3, Column = "ItemId")]
        [Index(4, Column = "Id", Type = "string")]
        [Element(5, Column = "QuantityType", Type = "string")]
        public virtual IDictionary<string, string> QuantityIdentifiers
        {
            get { return _identifiersVariants; }
            set { _identifiersVariants = value; }
        }

Это часть отображения, которая также генерируется в приложении, над которым я работаю;

<map name="QuantityIdentifiers" table="PluginProduct_QuantityIdentifiers" cascade="all">
      <index column="Id" type="string" />
      <element column="Type" type="String" />
    </map>

Когда я использую набор инструментов T4 от Microsoft для генерации из диаграммы классов, я получаю следующую ошибку:

Error 235 Running transformation: System.InvalidOperationException: Sequence contains no elements
   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
   at Microsoft.VisualStudio.TextTemplating6FC9B85C3A64B0406665113D095DEF7E.GeneratedTextTransformation.controllerTemplate.TransformText() in c:\Projects\site\PluginGenerator\controllerTemplate.tt:line 722
   at T4Toolbox.Template.Transform()
   at T4Toolbox.Template.Render()
   at Microsoft.VisualStudio.TextTemplating6FC9B85C3A64B0406665113D095DEF7E.GeneratedTextTransformation.generateFiles.RunCore() in c:\Projects\site\CMS.PluginGenerator\generateFiles.tt:line 74
   at T4Toolbox.Generator.Run()
   at Microsoft.VisualStudio.TextTemplating6FC9B85C3A64B0406665113D095DEF7E.GeneratedTextTransformation.TransformText() in c:\Projects\site\Product\Generator\PluginGenerator.tt:line 18
   at Microsoft.VisualStudio.TextTemplating.TransformationRunner.RunTransformation(TemplateProcessingSession session, String source, ITextTemplatingEngineHost host, String& result)  1 1 

Я надеюсь, что кто-нибудь может помочь мне объяснить и выяснить, откуда исходит эта ошибка. Застрял в этой проблеме в течение почти двух дней ..

Ответы [ 2 ]

0 голосов
/ 22 июня 2010

Насколько я знаю, nHibernate отображает словарь через динамический компонент см. http://ayende.com/Blog/archive/2009/04/11/nhibernate-mapping-ltdynamic-componentgt.aspx Однако вы должны знать, что в случае «по умолчанию» подразумевается столбец в таблице для каждой записи в словаре. Это применимо?

0 голосов
/ 14 мая 2010

В итоге я смог обойти это, потому что мы изменили дизайн приложения по нескольким причинам, тем не менее, я все еще не знаю, как сопоставить iDictionary с базой данных. Так что, если у кого-то есть решение, ответы приветствуются! Ведь проблема решена путем модификации конструкции

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