web-dev-qa-db-ja.com

EntityFrameworkコードファースト:フィールドの順序を設定

移行で「コードファースト」アプローチでEntityFrameworkを使用しています。

モデルからテーブルを正常に生成しましたが、モデル内の順序ではなくアルファベット順に列が追加されています。

私はこれを試しました:

[Key, Column(Order=0)]
public int MyFirstKeyProperty { get; set; }

[Column(Order=1)]
public int MySecondKeyProperty { get; set; }

しかし、それは機能していないようです。

データベース内のフィールドの順序を手動で設定するにはどうすればよいですか?

ASP.NET CoreおよびEF Core(SqlServer)v1.1.0を使用しています。

17
Glenn Utter

現在、クラスプロパティによる列の順序付けは実装されていません。列の順序付けについての長い議論があります。 列の順序#2272

2017年7月12日現在の更新

この問題はバックログのマイルストーンにあります。これは、2.0リリースでは発生しないことを意味します。 2.0リリース後にバックログを再評価し、その時点でこの項目を検討します。

2019年6月10日現在の更新

問題2272はEF Core v2.1に同梱され、生成されたテーブルの列の順序をクラスのプロパティの順序と一致させます。ただし、@ lloyd-conradeが述べたように、これは最初の作成にのみ役立ちます

Column属性のOrderプロパティを尊重する実装の可能性を追跡するために、新しい問題#10059が作成されました。

#2272の実装が不十分で、[Column(Order = 1)]のようなものを指定することが役立つ場合は、この問題に投票し、シナリオに関する詳細を追加してください(まだリストされていない場合)。

「Punted for 3.0」ラベルが2019年5月10日に追加されたことに注意してください。これは、EF Core 3.0でnot出荷されません。

11
Rahul Nikate

更新:EF Core 2.1では、少なくとも最初の移行では、関連するプロパティがアルファベット順ではなく、それぞれのクラスで宣言されている順序でテーブルに列が追加されます。 here を参照してください。ただし、同じテーブルで実行された以降のEntity Frameworkの移行では、以前に作成された列の列の順序は変更されません。

5
Lloyd Conrade

現時点ではEFコアはそれをサポートしていません。しかし、回避策があります。つまり、移行操作で明示的にSQLを指定できます。

移行でCreateTableメソッドを使用する代わりに、以下に示すようにSQLを明示的に記述する必要があります。必要に応じて順序を指定できます。

migrationBuilder.Sql("CREATE TABLE Properties(
   MyFirstKeyProperty   INT   NOT NULL,
   MySecondKeyProperty int    NOT NULL,
   AGE  INT   NOT NULL,
   ......
   ......   
   PRIMARY KEY (MyFirstKeyProperty)
)");

rowanmillerの通信については、今のところその問題を整理する方法についてここで読むことができます

1
Sampath