Nhibernate Guid с ПК MySQL - PullRequest
0 голосов
/ 11 марта 2010

У меня есть вопрос. Я использую NHibernate с MySql. На своих объектах я использую Id (PK) для своей бизнес-логики и Guid (для репликации). Итак, мой BaseDomain:

 public class BaseDomain
 {
    public virtual int Id { get; set; }
    public virtual Guid Guid { get; set; }
    public class Properties
    {
        public const string Id = "Id";
        public const string Guid = "Guid";
    }
    public BaseDomain() { }
 }

Мой домен использования:

public class ActivityCategory : BaseDomain
{
    public ActivityCategory() { }
    public virtual string Name { get; set; }
    public new class Properties
    {
        public const string Id = "Id";
        public const string Guid = "Guid";
        public const string Name = "Name";
        private Properties() { }
    }
}

Отображение:

 <class name="ActivityCategory, Clients.Core" table='Activity_category'>
   <id name="Id" unsaved-value="0" type="int">
      <column name="Id" not-null="true"/>
      <generator class="native"/>
   </id>
   <property name="Guid"/>
   <property name="Name"/>
 </class>

Но когда я вставляю свою сущность:

[Test]
    public void Test()
    {
        ActivityCategory ac = new ActivityCategory();
        ac.Name = "Test";
        using (var repo = new Repository<ActivityCategory>())
            repo.Save(ac);
    }

Я всегда получаю '00000000-0000-0000-0000-000000000000' в моем поле Guid. Что я должен сделать для создания правильного Guid. Может быть картирование?

Большое спасибо!

1 Ответ

1 голос
/ 11 марта 2010

С точки зрения NHibernate, вы должны установить guid в C # или сообщить NHibernate, что он генерируется базой данных.

В первом случае установите свойство guid в конструкторе.

public class BaseDomain
{
    public BaseDomain()
    {
        Guid = Guid.NewGuid();
    }
}

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

<class name="ActivityCategory, Clients.Core" table="Activity_category">
    <id name="Id" not-null="true" >
        <generator class="native" />
    </id>
    <property name="Guid" generated="insert" insert="false" update="false" />
    <property name="Name" />
</class>
...