質問
ATimeをキーとしたテーブル1とテーブル2を作成しています。
テーブル1のデータを取得した際に、紐付くテーブル2のデータも取得することを目的としています。
現状、外部キーを利用した実装を考えていますが、後述の問題が発生します。
テーブル1
public class テーブル1
{
[Key, Column("日時", Order = 0)]
public DateTime ATime { get; set; }
[Column("回数")]
public int Count { get; set; }
public virtual ICollection<テーブル2> Mdl2 { get; set; }
}
テーブル2
public class テーブル2
{
[Key, Column("日時", Order = 0), ForeignKey("PMdl")]
public DateTime ATime { get; set; }
[Key, Column("No", Order = 1)]
public int No { get; set; }
public int Val { get; set; }
public virtual テーブル1 Mdl1 { get; set; }
}
問題1:外部キーを設定し、ナビゲーションプロパティに[ForeignKey("ATime")]を付与した場合
ビルド時に以下のエラーが発生します。
「リレーションシップ制約では Dependent および Principal Roles のプロパティ数は同じになる必要があります。」
問題2:外部キーを設定し、[ForeignKey("ATime")]を付与しない場合
保存時に以下のエラーが発生します。
「リレーションシップの外部キー プロパティを公開しないエンティティの保存中にエラーが発生しました。例外のソースとして単一のエンティティを特定できないため、EntityEntries プロパティは null を返します。エンティティ型で外部キー プロパティを公開すると、保存中の例外の処理が容易になります。詳細については InnerException を参照してください。」
「42703: column "テーブル1_ATime" of relation "テーブル2" does not exist」
SQLログを見ると、INSERT文の中にナビゲーションプロパティのデータ項目も入っていました。
外部キーを外して処理を行った場合、問題2と同じ状態になります。
問題解決方法、または、最初に記載した目的が達成できる他の方法がありましたら、ご教授願います。
環境は以下となっています。
Windows7
Framework:4.6
EntityFramework:6.1.3
EntityFramework6.Npgsql:3.1.1
Npgsql:3.2.3
Postgre:9.6

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/10/17 11:59