我的EF模型是從我的SQL Server數據庫生成的。然後我爲EF模型生成了一個針對RIAServices的DomainService。其中一個實體被稱爲「EntryCategories」。在創建的DomainService這種方法:手工構建的RIAServices不受支持的類型DomainService
public IQueryable<EntryCategories> GetEntryCategoriesSet()
{
return this.Context.EntryCategoriesSet;
}
由於我的用戶界面顯示模式看起來與物理模型完全不同,我決定寫我自己的DomainService對於和相關實體。是的,我知道我們要修改生成的內容,但它裏面有很多東西,我想專注於一件小事。
我除去從所生成的DomainService的EnableClientAccess屬性並增加了一個稱爲ClientDomainService新的類,並且在它包封所生成的DomainService:
[EnableClientAccess()]
public class ClientDomainService : DomainService
{
// the generated domain service encapsulated in my new one.
private DataDomainService _dcds = new DataDomainService();
// reimplement one of the DataDomainService methods
public IQueryable<EntryCategories> GetEntryCategories()
{
return (from t in _dcds.GetEntryCategoriesSet() where t.EntryCategoriesVersions.EntryCategoriesVersionId == datahead.EntryCategoriesVersions.EntryCategoriesVersionId orderby t.DisplayOrder select t);
}
}
我嘗試的非常拳頭的是要重新實現GetCateogoriesSet方法但基礎數據是根據我班的另一個實體(未顯示)過濾的。但是,當我建立這個,一個錯誤顯示出來:
Entity 'DataProject.Web.EntryCategories' has a property 'EntryCategoriesVersionsReference' with an unsupported type
如果我註釋掉我CientDomainService,更換所產生的DomainService的EnableClientAccess屬性,並把analagous LINQ過濾原GetEntryCategoriesSet方法,項目編譯沒有錯誤。
生成的DomainService對我的新服務沒有什麼特別之處?它是metadata.cs文件嗎?
Tor Haugen的答案爲我工作。我沒有足夠的代表來提高他的答案。我應該注意到,我爲我的RIA服務域上下文創建了一個基類,可以在不同的項目中重用,而實際定義實體的類是我擁有[LinqToEntitiesDomainServiceDescriptionProvider]屬性的類。因此,對objectcontext的強烈引用對我來說並不重要,因爲我直接引用了來自該特定objectcontext的實體。感謝所有的幫助! – 2011-06-17 15:52:51
有關此問題可能發生的方式的進一步說明,請通讀此主題。 http://forums.silverlight.net/p/233457/583536.aspx – 2011-08-10 00:29:02