可以在实体框架中设置列排序
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
【讨论】:
以上是关于可以在实体框架中设置列排序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 窗体 (C#) 中设置列表框的确切高度?