2012-11-14 64 views
3

我覺得我可能會在這裏丟失一些關鍵的東西(或者只是簡單的),但是我無法得到這個工作。公開WCF數據服務中的實體的其他屬性


鑑於我創建了一個ASP.NET(.NET 4.0)Web應用程序項目,我在其中託管一個WCF數據服務。 我已經從現有數據庫生成了EF 5.0實體類型的POCO實體,並且像往常一樣實體類是partial

我的數字,

吉,我將在數據服務「擴展」這些部分類以露出另外的(非持續,計算)屬性*

*爲了簡便起見,我們假設一個Person實體,而我要添加FullName屬性,它串接FirstNameLastName

無論如何,我去我的生意繼續partial類(在課程的相同的命名空間)

public partial class Person { 
    public string FullName { 
     get { return this.FirstName + " " + this.LastName; } 
    } 
} 

然而,當我在服務上,沒有FullName查詢Person實體。當我查詢服務的$metadata時,沒有定義FullName

需要做什麼(如果有什麼)來支持?


注意

  • 所有實體通過config.SetEntitySetAccessRule("*", EntitySetRights.All);
  • 我已經試過各種屬性沒有成功,包括EdmScalarPropertyAttributeDataMemberAttribute對物業裝飾是可見的。

回答

2

除非它在.NET 4.5中改變(我沒有看過),我不認爲這可以工作。 DataService<T>是非常有限的。它甚至不支持所有EF功能。數據服務本身非常靈活,並且you can define an entirely custom service which returns anything you want。但是,你沒有得到EF上下文的「自動」映射。

因此,您不幸的是必須在「簡單但有限」和「困難但靈活」之間進行選擇,而兩者之間幾乎沒有任何差異。

+0

我明白了。我不認爲這是數據服務本身會關注的東西;相反,英孚在某個地方給我提供了兜帽。我認爲數據服務主要是將URI /方法映射到實體及其成員。手動修改實體定義從修改後的模式重新生成它有什麼區別? – Dan

+1

您的擴展屬性對EF模型完全未知。 DataService 從EF模型派生出它的輸入信息。因此,只有實際上是EF模型一部分的屬性纔會出現。 –

+0

明白了;我一直在探索WCF DS的新版本中提供的一些功能,以及定製的服務定義。也許在某個地方,易於實施和靈活性之間的平衡將浮出水面。 – Dan

1

還有另外一種方法,通過使用波蘇斯,在這個優秀的帖子解釋道:http://www.codeproject.com/Articles/514598/Understanding-OData-v3-and-WCF-Data-Services-5-x (去與波蘇斯節創建WCF數據服務)

基本上它的描述如下:

你可以具有這些屬性裝飾你的POCO實體:

[DataServiceEntity] 
[DataServiceKey("Id")] 
public class MyClass 
{ 
    public int Id { get; set; } 
} 

然後創建一個公開的實體的集合靜態的IQueryable <>會員類:

public class MyClassesDataSource 
{ 

    public static IQueryable<MyClass> 
    { 
     get 
     { 
      ... // You can access your EF context here 
     } 
    } 
} 

最後,而不是由DataService<YouObjectContext>派生,創建服務獲得從DataService<MyClassesDataSource>

現在,我試圖找出什麼是處理數據源中的EF上下文的最好方法:)