EFCore

2017-12-03 5 views
2

とプライベートフィールドとカスタムの外部キー列名を設定し、私は次のようなデータモデルを持っている:EFCore

​​

これは素晴らしい作品と私​​の予想によると、私はIdBarIdを含むFooテーブルを持っています。私のプライベートフィールドBarIdと私のBarプロパティは、Fooをデータベースから読み込むと正しくマテリアライズされます。

問題は、自分のプライベートフィールドに名前を付ける方法を見つけて、自分のデータベース列に別の名前を選択することです。私の資産を_barIdと名付け、私のデータベースには私の列名としてBarIdを選択したいと思います。

これは可能ですか?


私は私のFooクラス内のフィールドの名前を変更し、指定しようとしている私の私のEntityTypeConfiguration

builder.HasOne(x => x.Bar).WithMany().HasForeignKey("_barId"); 

で外部キー_barIdを(今、従来の非命名)しかし、これはEFはまだ生成の結果BarIdカラム、Barテーブルの外部キーとして使用することはありません。

migrationBuilder.CreateTable(
    name: "Foos", 
    columns: table => new 
    { 
     Id = table.Column<int>(nullable: false) 
      .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 
     BarId = table.Column<int>(nullable: true), 
     _barId = table.Column<int>(nullable: false) 
    }, 
    constraints: table => 
    { 
     table.PrimaryKey("PK_Foos", x => x.Id); 
     table.ForeignKey(
      name: "FK_Foos_Bars__barId", 
      column: x => x._barId, 
      principalTable: "Bars", 
      principalColumn: "Id", 
      onDelete: ReferentialAction.Cascade); 
    }); 

Foo table structure

答えて

4

最初に、データベース列とFKをエンティティのプロパティ(フィールドではない)にマップします。プロパティは実際のものと同じ場合もあります - shadow

だから、次の行:

builder.HasOne(x => x.Bar).WithMany().HasForeignKey("BarId"); 

Bar地図 - BarId呼ばFoo shadowプロパティに>Foo関係FKを、そのまま滞在する必要があります。

Propertyメソッドを使用して、プロパティタイプ、バッキングフィールド、列名、タイプ、およびその他の属性を設定します。たとえば、

定義するときとFKを指定するときに同じプロパティ名を使用するようにしてください。また、Entry(entity).Property(propertyName)を使用して値を取得/設定し、変更したものとしてマークし、EF.Property(entity, propertyName)を使用して、LINQ to Entitiesクエリ内の値にアクセスすることもできます。

+0

これはまさに私が必要なものです、ありがとう! – Schaemelhout

関連する問題