EFでWCFサービスを作成しています。 カスタマーエンティティの子を返すときに問題が発生します。WCF Entity Frameworkがエンティティの子にアクセスできない
[DataContract]
public class Customer
{
[Key]
[DataMember]
public int CustomerID { get; set; }
[DataMember]
public string FirstName { get; set; }
// Customer has a collection of BankAccounts
[DataMember]
public virtual ICollection<BankAccount> BankAccounts { get; set; }
}
[DataContract(IsReference = true)]
public class BankAccount
{
[Key]
[DataMember]
public int BankAccountID { get; set; }
[DataMember]
public int Number { get; set; }
// virtual property to access Customer
//[ForeignKey("CustomerID")]
[Required(ErrorMessage = "Please select Customer!")]
[DataMember]
public int CustomerID { get; set; }
[DataMember]
public virtual Customer Customer { get; set; }
}
私が取得エラー:
public Customer GetCustomer(int customerId)
{
var customer = from c in dc.Customers
where c.CustomerID == customerId
select c;
if (customer != null)
return customer.FirstOrDefault();
else
throw new Exception("Invalid ID!");
}
私はそれをデバッグしようとしたが、この関数が戻る:私は呼ん
An error occurred while receiving the HTTP response to http://localhost:8732/Design_Time_Addresses/MyServiceLibrary/MyService/. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.
サービス機能のサンプルコードの下 顧客とそれは 子供のBankAccounts、私も遅延読み込みを無効にしました。 は、私は私がこのラインに
public virtual ICollection<BankAccount> BankAccounts { get; set; }
フォームの顧客クラスをコメントアウトした場合、すべてが私は銀行口座のを取得することはできませんを除いて、それが唯一の顧客を返す動作することが分かりました。 私はWCFを新しくしていますので、私を助けてください。 Thanx。
私は問題を解決する方法を見つけました。 ただIgnoreDataMember
[IgnoreDataMember]
public virtual Customer Customer { get; set; }
とMyDbContextコンストラクタでディアブルProxyCreationとして銀行口座のからお客様のリファレンスをマークしなければなりませんでした。
this.Configuration.ProxyCreationEnabled = false;
ヒント:if文を使用してExceptionをスローするのではなく、return customer.Single();を使用してください。正確に1つのマッチが予想される場合は、シングルを使用する必要があります。 – cederlof
これは、ナビゲーションプロパティが仮想であるためです。 [この回答](http://stackoverflow.com/a/15822764/704144)を参照してください。 –