【问题标题】: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 配置可用于配置此内容,而不是将此字段保留在模型类的末尾。

【问题讨论】:

标签: c# entity-framework ef-code-first entity-framework-6 ef-fluent-api


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2014-12-05
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    相关资源
    最近更新 更多