3

是否有任何可能的配置來設置實體框架代碼中的數據庫列排序第一種方法..?可能在實體框架中設置列排序

我所有的實體組應該有一些共同的領域保持recordinfo

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配置,我可以用來配置這個,而不是保持這個領域在我的模型類的末尾。

+0

如果我有3個繼承級別,並且仍然完全控制列排序,該怎麼辦?謝謝! –

回答

4

我假設您使用實體框架6,因爲EF Core中的列排序爲is not yet supported

您可以使用數據屬性或流利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

或者,您可以用流利的API在OnModelCreating方法在你的DbContext類:

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

這種方式是多一點冗長,但你可以對發生的事情有更多的控制權。

+0

感謝史蒂夫的偉大重播。我還有一個問題讓我說,如果我在我的模型中爲幾個字段設置列順序,那麼剩餘列的順序是什麼(我的意思是在同一模型中沒有訂單號的列)。 –

+0

@IshaJohn我相信他們會按字母順序排列在您的編號列之後。但我不確定如果不從0開始會發生什麼情況。 – Steve

0

只需使用:

using System.ComponentModel.DataAnnotations.Schema; 

代碼:

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

注意:默認情況下cloumn arder需要一個很大的數字,所以如果你只訂購此列將在表中第一個,除非你在此情況下訂購了另一個較低訂單號的專欄:0 Hope Helps!