我有一个问题。我使用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);
}
我的Guid字段总是得到'00000000-0000-0000-0000-000000000000'。 我应该怎么做才能生成正确的Guid。可能是映射?
非常感谢!
答案 0 :(得分:1)
从NHibernate的角度来看,你应该在C#中设置guid,或者告诉NHibernate它是由数据库生成的。
在前一种情况下,在构造函数中设置guid属性。
public class BaseDomain
{
public BaseDomain()
{
Guid = Guid.NewGuid();
}
}
您可以像这样映射属性whose value is generated in the database。根据值的生成方式,您可能还需要从insert语句中排除该属性。
<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>