0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EFで外部キーを持つテーブルにインサートすると親テーブルに空レコードが挿入される

Posted at

現象

外部キーを持つ子テーブルにデータをインサートする際、外部キーIDの値を設定しても、何故か親テーブルにからのレコードが挿入されてしまう。
また、小テーブルのデータの外部キーIDの値もNullになってしまう。

コード

親テーブル定義
public class Parent
{
    public int Id { get; set; }
    public string Name { get; set; }
}
子テーブル定義
public class Child
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
    public Parent parent { get; set; } = new()
}
Insert処理
Child child = new();
child.Name = "test";
child.ParentId = "1";
context.Child.Add(child);

原因

本当に初歩的なことであるが、childのparentオブジェクトの指定がないため、Nullとして外部キーが設定されてしまっている。
エラーにはせず、EntiryFrameworkが親テーブルにもデータをインサートしている。

修正方法

childのparentオブジェクトを設定する。

Insert処理
Child child = new();
child.Name = "test";
child.ParentId = "1";
+ child.Parent = context.Parent.Where(f => f.Id == 1).FirstOrDefault();
context.Child.Add(child);

EntityFrameworkはおせっかいをしてくるため、便利な反面、予想外の処理もすることがあるため、よく調べて使用する必要があると反省。
他にも対象方法はあると思うが、一旦これで解決。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?