C# FluentNHibernate表列顺序

C# FluentNHibernate表列顺序,c#,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我似乎无法使用流利的NHibernate使表的列顺序正确 Employee.cs public class Employee : Entity { #region Fields private EmployeeStatus _status; private DateTime _created; private DateTime? _updated; #endregion #region Constructor public Empl

我似乎无法使用流利的NHibernate使表的列顺序正确

Employee.cs

public class Employee : Entity
{
    #region Fields

    private EmployeeStatus _status;
    private DateTime _created;
    private DateTime? _updated;

    #endregion

    #region Constructor

    public Employee()
    {
        _status = EmployeeStatus.Active;
        _created = DateTime.Now;
    }

    #endregion

    #region Properties

    public virtual string FirstName { get; set; }
    public virtual string MiddleName { get; set; }
    public virtual string LastName { get; set; }

    public virtual string FullName
    {
        get
        {
            return string.Format("{0} {1} {2}", FirstName, MiddleName, LastName);
        }
    }

    public virtual Gender Gender { get; set; }
    public virtual DateTime BirthDate { get; set; }
    public virtual Address HomeAddress { get; set; }

    public virtual EmployeeStatus IsActive
    {
        protected set { _status = value; }
        get { return _status; }
    }

    public virtual DateTime Created
    {
        protected set { _created = value; }
        get { return _created; }
    }

    public virtual DateTime? Updated
    {
        protected set { _updated = value; }
        get { return _updated; }
    }

    #endregion

    #region Overrides

    public override string ToString()
    {
        return FullName;
    }

    #endregion
}
HomeAddress.cs

public class Address : ValueObject<Address>
{
    #region Properties

    public virtual string City { get; private set; }
    public virtual string Zipcode { get; private set; }
    public virtual string AddressLine { get; private set; }

    #endregion

    #region Constructor

    public Address(string city, string zipcode, string addressLine)
    {
        City = city;
        Zipcode = zipcode;
        AddressLine = addressLine;
    }

    /// <summary>
    /// Required by NHibernate
    /// </summary>
    protected Address() { }

    #endregion

}
但是NHibernate却输出了这个:

create table `Employee` (
        Id VARCHAR(40) not null,
       FirstName VARCHAR(255),
       MiddleName VARCHAR(255),
       LastName VARCHAR(255),
       BirthDate DATETIME,
       IsActive INTEGER,
       Created DATETIME,
       Updated DATETIME,
       City VARCHAR(255),
       Zipcode VARCHAR(255),
       AddressLine VARCHAR(255),
       primary key (Id)
    )
是否可以仅从NHibernate/FluentNHibernate对表的列进行排序?或者我应该先在数据库中手动创建这些列结构吗


谢谢

在我看来,数据库列顺序对数据库服务器来说是没有意义的,您总是可以按需要的任何顺序选择列。NHibernate或Fluent NHibernate显然是在编写组件属性之前的简单属性脚本。就我个人而言,我不会担心这一点,但如果这对您很重要,那么您必须自己创建表,或者让NHibernate生成创建脚本,然后您可以对其进行编辑。

我通过以下方式在我的项目中对NHibernate中的列进行排序:

  • 导出fluent生成的HBM映射

  • 将这些映射XML导入到项目中

  • 更新Fluent配置以使用XML映射而不是类


  • 大约花了一个小时。

    比如说,当sysadmin直接签出数据库时,它确实提供了可读性。但更重要的是,如果我们使用存储过程,这一点很重要。这是怎么回事?我能想到的唯一一个SP用例是在不指定列顺序的情况下进行插入,我强烈建议不要这样做。列顺序从根本上说很重要,特别是对于旧式集成。如何做到这一点?列应始终按名称而不是位置寻址。我从未在考虑数据库列顺序的系统上工作过。我读过MySQL中的性能调优,但这是特定于提供商的。
    Id 
    FirstName
    MiddleName
    LastName
    BirthDate
    City
    Zipcode
    AddressLine
    IsActive
    Created
    Updated
    
    create table `Employee` (
            Id VARCHAR(40) not null,
           FirstName VARCHAR(255),
           MiddleName VARCHAR(255),
           LastName VARCHAR(255),
           BirthDate DATETIME,
           IsActive INTEGER,
           Created DATETIME,
           Updated DATETIME,
           City VARCHAR(255),
           Zipcode VARCHAR(255),
           AddressLine VARCHAR(255),
           primary key (Id)
        )