Entity Framework Coreでクラスをメンバとして扱う方法

こんにちは、花粉に悩まされてる石川です。

備忘録程度ですがハマったことがあったので記事にします。

Code First Migrationに失敗する

以下のクラスでテーブルを立てようとしました。

public class Person
{
  public int Id { get; set; }
  public GeoCoordinate Position { get; set; }
}

public class GeoCoordinate
{
  public double Latitude { get; set; }
  public double Longitude { get; set; }
}

理想としては

カラム名
Idint
Position_Latitude double
Position_Longitudedouble

のようなテーブルが立ち上がってほしいんですが………

> Add-Migration init
The entity type 'GeoCoordinate' requires a primary key to be defined.

困りました。

何が起きているのか

  1. GeoCoordinateを外部キーとして認識
  2. テーブルを作ろうとする
  3. GeoCoordinateに[Key]属性がないので主キーが見つからないとエラーが出る

PersonクラスでGeoCoordinateをナビゲーションプロパティとして認識して外部キー制約を作ろうとして失敗しているようです。(たぶん)

どうすればいいのか

GeoCoordinateクラスに属性を一つ付加するだけで解決します。

[Owned]
public class GeoCoordinate
{
  public double Latitude { get; set; }
  public double Longitude { get; set; }
}

できました。

おわり。

※この記事はQiitaに投降したものを再編集したものです。

FIXER Inc. 石川 順平
  • FIXER Inc. 石川 順平
  • 九州のとある高専卒のFIXER2年目。すき間時間でbotを作ったりAZ系の資格の勉強をしたりしています。まだまだAzure初心者です。趣味はゲームやったりバイクで出かけたりすることです。某MMORPGとか騎空士をしたりもしてます。

%d人のブロガーが「いいね」をつけました。