2012-03-03 1 views
1

Я пытаюсь перенести проект nhibernate на основе hbm.xml на отображение по коду. У меня возникла проблема с работой раздела «Версия». В hbm.xml я есть:Nhibernate 3.2 Mapping By Code - Version (Concurrency)

< версия имя = столбец "Version" = тип»Version "=" Int32" несохраненную-значение = "0"/>

Я попытался с помощью следующего сопоставления:

 Version(x => x.Version, m => 
     { 
      m.Column(c => 
      { 
       c.SqlType("Int32"); 
       c.Name("Version"); 
      }); 
      m.Generated(VersionGeneration.Always); 
      m.UnsavedValue(0); 
      m.Insert(true); 
      m.Type(new NHibernate.Type.Int32Type()); 
     }); 

Но ничего, кажется, производит то же самое отображение в качестве исходного hbm.xml, все они в конечном итоге без типа = «Int32». У кого-нибудь есть идеи, как я могу это сделать, или если он поддерживается в 3.2?

Приветствия

Update:

Смотрите мой ответ

+0

Не бойтесь создавать ответ, который включает в себя рабочее сопоставление и обозначать его как правильное. Это совершенно верно для SO. – Fourth

ответ

2

После Toni комментарий я изменил свое отображение на:

Version(x => x.Version, mapper => 
     { 
      mapper.Generated(VersionGeneration.Never); 
      mapper.UnsavedValue(0); 
      mapper.Type(new NHibernate.Type.Int32Type()); 
     }); 

, доказывающие работать как мой оригинальный hbm.xml

1

Если версия свойство уже тип int32 то, что не вставлен в файл НВМ. Я думаю, что часть типа записывается только в xml-файл, если фактические типы разные. Пример (домен объект использует int32, но мы хотим, чтобы отобразить его с помощью int64):

// in the domain entity 
public int RowVersion{get;set;} 

// Mapping 
this.Version(x => x.RowVersion, mapper => 
    { 
     mapper.Generated(VersionGeneration.Never); 
     mapper.UnsavedValue(0); 
     mapper.Type(new NHibernate.Type.Int64Type()); 
    }); 

// Xml file 
<version name="RowVersion" type="Int64" unsaved-value="0" /> 
+0

Просто попробовал свое решение, но при сохранении модели получил следующую ошибку. 'Invalid Cast (проверять ваше сопоставление для несоответствий типа свойства); setter of Models.Tester' Изменено мое оригинальное сопоставление только для этого: 'Version (x => x.Version, mapper => {mapper.Generated (VersionGeneration.Never); mapper.UnsavedValue (0); mapper .Type (новый NHibernate.Type.Int32Type());}); ' И все это работало так же, как при использовании hbm.xml – SteveC