C# 非插入代码标识的nhibernate映射

C# 非插入代码标识的nhibernate映射,c#,asp.net,nhibernate,mapping-by-code,C#,Asp.net,Nhibernate,Mapping By Code,我用的是nhibernate 5,1,1。代码映射 添加条目时,您发送2个请求 从列表中选择最大值(id) 插入(Id,Name,PetType)值({max(Id)的值},文本,1) 我需要在insert请求中不发送字段id,并且没有第一个请求。Id自动递增 我该怎么做 public abstract class BaseEntity { /// <summary> /// Ин. /// </summary> public virtua

我用的是nhibernate 5,1,1。代码映射 添加条目时,您发送2个请求

从列表中选择最大值(id)

插入(Id,Name,PetType)值({max(Id)的值},文本,1)

我需要在insert请求中不发送字段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\""));
    }
}
公共抽象类BaseEntity
{
/// 
/// Ин.
/// 
公共虚拟整数Id{get;set;}
/// 
/// Дата добавления
/// 
公共虚拟日期时间日期插入{get;set;}
}    
公共抽象类BaseMapping:ClassMapping,其中T:BaseEntity
{
受保护的基本映射(字符串名称选项卡)
{
此表(名称表);
this.Id(x=>x.Id,map=>
{
map.Generator(Generators.Increment);
map.Column(“\”Id\”);
});
this.Property(x=>x.DateInsert,x=>
{
x、 列(“日期插入”);
x、 插入(假);
x、 更新(假);
});
}
}
/// 
/// Справочник пород
/// 
公共类品种:BaseEntity
{
/// 
/// Название
/// 
公共虚拟字符串名称{get;set;}
/// 
/// Тип животных 
/// 
公共虚拟PetType PetType{get;set;}
}
公共类BreedMap:基本映射
{
公共繁殖地图():基本(“繁殖”)
{
this.Property(x=>x.Name,x=>x.Column(“\”Name\”);
属性(x=>x.PetType,x=>x.Column(“\”PetType\”);
}
}
我需要在插入请求中不发送字段id,并且没有第一个请求

如果我们的数据库支持标识(数据库端的自动增量),我们不应该使用
增量
,而是
本地
设置(或
标识

查看文档以了解详细说明

小提取物

增量

仅在以下情况下生成唯一的任何整型标识符: 没有其他进程将数据插入到同一个表中。请勿在中使用 一簇

native/identity

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

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

如果我们的数据库支持标识(数据库端的自动增量),我们不应该使用
增量
,而是
本地
设置(或
标识

查看文档以了解详细说明

小提取物

增量

仅在以下情况下生成唯一的任何整型标识符: 没有其他进程将数据插入到同一个表中。请勿在中使用 一簇

native/identity

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

执行此“从繁殖中选择最大值(id)”可能不会为您提供下一个id,因为可能有人已经使用了它。执行此“从繁殖中选择最大值(id)”可能不会为您提供下一个id,因为可能有人已经使用了它。
//map.Generator(Generators.Increment);
map.Generator(Generators.Native);