1

非常に奇妙な問題に直面しています。IIS 6.1 でホストされている Silverlight 5 アプリケーションにエンティティ フレームワーク 4 と ria サービスを使用しています。長期間、すべてがスムーズに実行されていますが、アプリケーションが失敗し、イベント ログに次のエラー メッセージが記録されることがあります。

WebHost は要求を処理できませんでした。
送信者情報: System.ServiceModel.Activation.HostedHttpRequestAsyncResult/56703158
例外: System.ServiceModel.ServiceActivationException: コンパイル中の例外のため、サービス '/Services/EcoFleet-DomainServices-Repository-EcofleetRepository.svc' をアクティブ化できません。
例外メッセージは次のとおりです。DomainService 'EcofleetRepository' のエンティティ 'DeviceData' にはキーが定義されていません。DomainService 操作によって公開されるエンティティ タイプには、KeyAttribute でマークされたパブリック プロパティが少なくとも 1 つ必要です。DomainService 操作によって公開されるエンティティ タイプには、KeyAttribute でマークされたパブリック プロパティが少なくとも 1 つ必要です。
System.ServiceModel.DomainServices.Server.DomainServiceDescription.ValidateEntityTypes()
で System.ServiceModel.DomainServices.Server.DomainServiceDescription.Initialize()
で System.ServiceModel.DomainServices.Server.DomainServiceDescription。
System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func2 valueFactory で)
System.ServiceModel.DomainServices.Server.DomainServiceDescription.GetDescription (型 domainServiceType)
で System.ServiceModel.DomainServices.Hosting.DomainServiceHost..ctor (型 domainServiceType、Uri[] baseAddresses)
でSystem.ServiceModel.DomainServices.Hosting.DomainServiceHostFactory.CreateServiceHost(Type serviceType, Uri[] baseAddresses)
で System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses)
で System.ServiceModel.ServiceHostingEnvironment.HostingManager.CreateService( String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity)

で System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)

--- 内部例外スタック トレースの終わり ---
System.Runtime で.AsyncResult.End[TAsyncResult](IAsyncResult 結果)
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult 結果) プロセス名: w3wp
プロセス ID: 2300

アプリケーションは引き続き応答しますが、サーバーからエンティティをロードできません。サイトを停止して開始すると、すべてが再び機能します。

この場合のエンティティ (DeviceData) はデータベース テーブルであり、キーを持ってますが、どのエンティティが失敗するかはランダムに見えます。さらに、コンパイル時に「キーが定義されていません」というエラーが表示されることしか期待できません。誰が問題が何であるか、そしてそれを修正する方法についての手がかりを持っていますか?

4

2 に答える 2

1

エンティティには必須のキーが定義されていませDeviceDataん。名前付きのプロパティを作成するIdDeviceDataId、慣例によりキーとして扱われるプロパティを作成する必要があります (Entity Framework は現在、これらのプロパティを検索します)。また、マッピングを使用して他のプロパティをキーとして設定することもできます。これは、データ注釈属性を使用して実現できます。

[Key]
public int Foo { get; set; }

または流暢なマッピングで:

modelBuilder.Entity<DeviceData>().HasKey(d => d.Foo);
于 2013-07-22T08:39:14.667 に答える
0

まず、必須ではないため、コンパイル時にエラーが発生することはありませんが、エラーが発生しないと、EF がさまざまな方法でエラーを使用するため、かなりの頭痛の種になる可能性があります。そのため、名前を付けてキーを再定義するIdか、DeviceDataId(規則を使用して)モデルからキーを定義する必要があります。

あなたの質問から、DeviceData に対して定義されたキーがあるようです。その場合、モデルのキー列のプロパティを再確認することをお勧めします。

また、キー列がないとアプリのパフォーマンスが低下する可能性があることにも注意してください。

于 2013-07-22T08:47:18.240 に答える