可以在实体框架中设置列排序

Posted

技术标签:

【中文标题】可以在实体框架中设置列排序【英文标题】:Possible to set column ordering in Entity Framework 【发布时间】:2017-08-31 23:38:36 【问题描述】:

是否有任何可能的配置来设置实体框架代码优先方法中的数据库列排序..?

我所有的实体集都应该有一些公共字段来保存记录信息

public DateTime CreatedAt  get; set; 
public int CreatedBy  get; set; 
public DateTime ModifiedAt  get; set; 
public int ModifiedBy  get; set; 
public bool IsDeleted  get; set; 

我想将此字段保留在表格的末尾。是否有任何可能的 EF 配置可用于配置此内容,而不是将此字段保留在模型类的末尾。

【问题讨论】:

如果我有 3 个继承级别并且仍然可以完全控制列排序怎么办?谢谢! 如果您使用的是ef core,请查看以下帖子***.com/questions/51443459/… 【参考方案1】:

我假设您使用的是实体框架 6,因为 EF Core 中的列排序为 is not yet supported。

您可以使用数据属性或 fluent API 来设置列顺序。

要使用数据属性设置列顺序,请参考 System.ComponentModel.DataAnnotations 并使用 ColumnAttribute。如果您希望它与属性名称不同,您也可以使用此属性设置列名称。

[Column("CreatedAt", Order=0)]
public DateTime CreatedAt  get; set; 
[Column("CreatedBy", Order=1)]
public int CreatedBy  get; set; 

注意 Order 参数是从零开始的。

另见:http://www.entityframeworktutorial.net/code-first/column-dataannotations-attribute-in-code-first.aspx

或者,您可以在 DbContext 类的 OnModelCreating 方法中使用 Fluent API:

protected override void OnModelCreating(DbModelBuilder modelBuilder)

    //Configure Column
    modelBuilder.Entity<EntityClass>()
                .Property(p => p.CreatedAt)
                .HasColumnOrder(0);

另请参阅:http://www.entityframeworktutorial.net/code-first/configure-property-mappings-using-fluent-api.aspx

这种方式有点冗长,但您可以更好地控制正在发生的事情。

【讨论】:

感谢史蒂夫的精彩重播。我还有一个问题,如果我为模型中的几个字段设置列顺序,那么剩余列的顺序是什么(我的意思是同一模型中没有序号的列)。 @IshaJohn 我相信它们按字母顺序放在您编号的列之后。但是,我不确定如果您不从 0 开始会发生什么。 我可以在 EF6 中看到 ForeignKeys 上的“Order”属性不适用。如果我在我的类中引用了某个其他类的属性,则该属性的外键列将最后出现。有没有人可以解决这个问题?【参考方案2】:

只需使用:

using System.ComponentModel.DataAnnotations.Schema;

代码:

[DisplayColumn("Name" , Order = 1)]
public int UserName  get; set; 

注意:默认情况下,列顺序采用大数字,因此如果您仅订购此列,它将是表中的第一个,除非您订购了具有较低顺序号的另一列,在这种情况下为:0

【讨论】:

以上是关于可以在实体框架中设置列排序的主要内容,如果未能解决你的问题,请参考以下文章

在颤动中设置列宽

在 Tablesorter 中设置列​​宽

如何在 tableLayoutPanel 中设置列​​跨度

如何在 Windows 窗体 (C#) 中设置列​​表框的确切高度?

在 Oracle APEX 交互式网格中使用 JavaScript 从应用程序项中设置列值

添加新列时在alembic中设置列顺序