EF 4.3で複雑なキーを使用してAddOrUpdateでデータをシードする方法


101

開発データベースにテストデータをシードしようとしています。

私はcontext.People.AddOrUpdate(p => p.Id, people));多くの成功を収めて使用しています。

シードする必要がある別のテーブルがあり、そのテーブルでは主キーがわかりません。

たとえば、一致する姓と名に基づいてAddOrUpdateを実行します。

式を正しく記述する方法がわかりません。

context.People.AddOrUpdate(p => p.FirstName && p.LastName, people);

明らかに間違っていますが、それが私が探している解決策を伝えることを願っています。

回答:


200

これを試して:

context.People.AddOrUpdate(p => new { p.FirstName, p.LastName }, people);

12
@LadislavMrnka識別子が複合型である必要がある場合はどうなり context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)ますか?
ゲイブ

3
@LadislavMrnka、また、プロパティがnull許容型である場合はどうなりますか?すなわち context.People.AddOrUpdate(p => new { p.Birthdate }, people)
stack247 2014

2
ここで注意すべき点は、「people」コレクションはリストではなくARRAYである必要があるということです。エンティティのリストがある場合は、リストで.ToArray()を呼び出すだけです。私はそれと苦労しました:)-良い答え
ディーン・マーティン

1
これを機能させることができません。(複合キーで指定された3つのプロパティに加えて)自動生成された番号を持つ別のIDフィールドがあるためか?
Sonic Soul

@LadislavMrnkaは、移行を実行してデータベースフィールドを更新した後、Migrationフォルダー(Configuration.csなど)を保持する必要がありますか?
AminM 2017年

1

Only primitive types or enumeration types are supported in this context.ナビゲーションプロパティを使用したために取得した場合-外部キープロパティをエンティティに直接追加することを検討し(おそらくゲッターのみを使用)、Ladislav Mrnkaが提案したようにそれを使用してください


code firstアプローチで他のテーブル外部キーのナビゲーションプロパティを追加する方法は?私のような構造がありcontext.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)ますか?これは可能
ヨウゲンダージ19

ゲッタープロパティエラーを設定すると、エラーが発生しますThe specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
yogen darji
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.