[英]Should I remove all inheritance from my model in order to work with ria services?
我之前對此發表了一些問題,但有所不同。
因此,請考慮我們模型的一小部分:
Person是具有3個繼承自其的類的基類。
這4個在我們的設計中非常重要,並與許多其他實體鏈接。 我可以通過刪除繼承來解決ria服務遇到的所有問題,但這確實會增加模型的復雜性。
我遇到的第一個問題是我無法查詢客戶,雇員或配偶,但是有人給了我一個解決方案,那就是在DomainService中添加以下內容:
public IQueryable<Employee> GetEmployees()
{
return this.ObjectContext.People.OfType<Employee>();
}
public IQueryable<Customer> GetCustomers()
{
return this.ObjectContext.People.OfType<Customer>();
}
public IQueryable<Spouse> GetSpouses()
{
return this.ObjectContext.People.OfType<Spouse>();
}
接下來,我嘗試了一些對我來說很正常的事情:
var employee = new Employee()
{
//.... left out to reduce the length of this question
};
var spouse = new Spouse()
{
//.... left out to reduce the length of this questions
};
employee.Spouse = spouse;
context.People.Add(spouse);
context.People.Add(employee);
context.SubmitChanges();
然后我得到以下異常:
無法檢索派生實體類型“欺騙”的實體集。 使用EntityContainer.GetEntitySet(Type)獲取基本實體類型“ Person”的實體集。
即使配偶已經在數據庫中,並且我先取回它,我也會遇到類似的異常。
另請注意,出於某些原因,在某些地方使用“人”代替“人” ...
那么我該如何解決這個問題,我在做什么錯?在使用帶有繼承的ria服務時,我會一直陷入困境嗎?
我在網上找到了一些參考資料,都說它可以正常工作,然后在其中的DomainService代碼中他們改變了某些內容,但沒有任何細節。
我正在使用VS2010 RC1 + Silveright 4
注意:神奇地在所有MIX會話中工作的數據源窗口對我而言不起作用...它從不顯示任何內容
此行為是由於RC1中的錯誤所致。 有關詳細信息,請參見http://forums.silverlight.net/forums/p/169599/384514.aspx#384514 。
RC1沒有已知的解決方法,但是您顯示的層次結構在RC2中應該可以正常工作。 該錯誤集中在使用派生類型(EntityRef和EntityCollection)的關聯上,因此我懷疑是在您的場景中觸發了該錯誤的是Spouse關聯。
關於“人”與“人”-實體集的名稱選擇來自EF對實體名稱的復數。 客戶端上的查詢名稱來自DomainService中的相應查詢名稱,這意味着您可以根據需要公開一個公共IQueryable GetPeople()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.