PKにGuidを使用するSQLデータベースがあり、挿入するとNewId()が生成されます。DBにキーを管理させ、コードにPKプロパティを設定させないため、エンティティキー:true、Setter:private、およびStoreGeneratedPattern:Identityを使用してプライマリキーを設定して、そのデータベースを指すEFデータコンテキストを設定しています。
このデータにアクセスするためのOData(System.Web.Data.Services.DataService)エンドポイントがあります(Hanselmanが行ったように) 。
このサービスへのサービス参照を持つ別のアプリがあります。この参照(つまりProduct)から新しいオブジェクトを作成しようとすると、ProductId主キーはデフォルトでGuid.Emptyに設定されます。
var serviceEntities = new ServiceEntities(serviceUri); //OData endpoint
var product = new Product();
product.Name = "New Product";
serviceEntities.AddToProducts(product);
serviceEntities.SaveChanges(); // error happens here
デバッグするとき、Product.ProductIdプロパティを確認し、Guid.Emptyに設定します。SaveChangesを呼び出すときに、ProductIdフィールドをサービスに送信したくありません。私が得る応答は次のとおりです。
リクエストストリームの処理中にエラーが発生しました。プロパティ'ProductId'は読み取り専用のプロパティであり、更新できません。このプロパティがリクエストペイロードに存在しないことを確認してください。
これを行う方法はありますか、またはこのセットアップを正しく取得し、DBにキーを生成させるために何ができますか?