質問: EntityState.Added`のエンティティ状態を設定する必要を回避する方法はありますか? または、DbSetのCRUD操作をストアドプロシージャにマップすることはできますか? **編集** これは大幅に短縮されたバージョンのスキーマですが、これが問題に関係するすべてです。 ``` public class Shipment { public int Id { get; set; } // 60 other properties public virtual ICollection Documents { get; set; } } public class Document { public int ShippingId { get; set; } public string DocumentType { get; set; } public byte[] Content { get; set; } public virtual Shipment Shipment { get; set; } } ``` `Shipment`エンティティを`DbContext`にアタッチするか、手動でその状態を設定しようとすると、上記の例外が発生します。 繰り返しますが、現時点でデータベーススキーマを変更することはできません。また、 `Document`似た、キーを追加したり、キーを追加する手段を持たないモデルが他にもたくさんあります。 **編集2** これにはさらに説明が必要だと思います。明らかに、 `DbContext`は、 `DbContext`がないとその`DbContext`がわからないため、挿入/更新/削除できません。 `Shipping`エンティティを取得し、ナビゲーションプロパティ`Documents`を設定するときに読み取ることができるようにするだけです。ただし、 `Shipping`保存するときは、ナビゲーションプロパティを完全に無視してください。
回答: @jdwengが間違っていることを証明し、エンティティモデルのデータベースにバッキングフィールドがないときに何度も見た例外を生成しようとすると、この解決策に出くわしました。 `public Guid Id { get; set; } = Guid.NewGuid();`を追加しました`public Guid Id { get; set; } = Guid.NewGuid();`すべてのキーレスエンティティに変更し、 `entity.HasNoKey();`置き換え`entity.HasNoKey();` `entity.HasAlternateKey(x => x.Id);` `ModelBuilder`を使用します。 `HasAlternateKey`の概要:指定されたプロパティにまだ存在しない場合、このエンティティタイプのモデルに代替キーを作成します。これにより、プロパティは強制的に読み取り専用になります。 これはまさに私が探していたものです。