移行で「コードファースト」アプローチで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を使用しています。
現在、クラスプロパティによる列の順序付けは実装されていません。列の順序付けについての長い議論があります。 列の順序#2272
この問題はバックログのマイルストーンにあります。これは、2.0リリースでは発生しないことを意味します。 2.0リリース後にバックログを再評価し、その時点でこの項目を検討します。
問題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出荷されません。
更新:EF Core 2.1では、少なくとも最初の移行では、関連するプロパティがアルファベット順ではなく、それぞれのクラスで宣言されている順序でテーブルに列が追加されます。 here を参照してください。ただし、同じテーブルで実行された以降のEntity Frameworkの移行では、以前に作成された列の列の順序は変更されません。
現時点ではEFコアはそれをサポートしていません。しかし、回避策があります。つまり、移行操作で明示的にSQLを指定できます。
移行でCreateTable
メソッドを使用する代わりに、以下に示すようにSQLを明示的に記述する必要があります。必要に応じて順序を指定できます。
migrationBuilder.Sql("CREATE TABLE Properties(
MyFirstKeyProperty INT NOT NULL,
MySecondKeyProperty int NOT NULL,
AGE INT NOT NULL,
......
......
PRIMARY KEY (MyFirstKeyProperty)
)");