未插入代码标识的 NHIBERNATE 映射



我正在使用nhibernate 5,1,1。按代码映射 添加条目时,会发送 2 个请求

选择最大 (id( 来自 育种

插入 in Bred (Id, Name, PetType( valus ({value of max (id(}, text, 1(

我需要不要在插入请求中发送字段 ID,并且没有第一个请求。ID 自动递增 我该怎么做?

public abstract class BaseEntity
{
/// <summary>
/// Ин.
/// </summary>
public virtual int Id { get; set; }
/// <summary>
/// Дата добавления
/// </summary>
public virtual DateTime DateInsert { get; set; }
}    
public abstract class BaseMapping<T> : ClassMapping<T> where T : BaseEntity
{
protected BaseMapping(string nameTabel)
{
this.Table(nameTabel);
this.Id(x => x.Id, map =>
{
map.Generator(Generators.Increment);
map.Column(""Id"");
});
this.Property(x => x.DateInsert, x =>
{
x.Column(""DateInsert"");
x.Insert(false);
x.Update(false);
});
}
}
/// <summary>
/// Справочник пород
/// </summary>
public class Breed : BaseEntity
{
/// <summary>
/// Название
/// </summary>
public virtual string Name { get; set; }
/// <summary>
/// Тип животных 
/// </summary>
public virtual PetType PetType { get; set; }
}
public class BreedMap : BaseMapping<Breed>
{
public BreedMap() : base(""Breed"")
{
this.Property(x => x.Name, x => x.Column(""Name""));
this.Property(x => x.PetType, x => x.Column(""PetType""));
}
}

我需要不要在插入请求中发送字段 id,并且没有第一个请求......

如果我们的数据库支持IDENTITY(DB端的自动增量(,我们不应该使用Increment,而是Native设置(或Identity(

//map.Generator(Generators.Increment);
map.Generator(Generators.Native);

查看文档以获取详细说明

5.1.5.1. 生成器

小提取物

increment

生成任何整型标识符,这些标识符仅在以下情况下是唯一的 没有其他进程将数据插入到同一个表中。请勿在 一个集群。

native/identity

支持 DB2、MySQL、MS SQL Server 和 Sybase 中的标识列。 数据库返回的标识符将转换为属性 使用 Convert.ChangeType 键入。因此,任何整型属性类型都是 支持。

最新更新