4

框架:Silverlight的4 +實體框架4(SL商業應用:在溶液SL項目和名.web項目)RIA不會產生所有代理實體

我有我的數據層兩班(沒有映射到數據庫,手動創建的 - 我需要他們對特定視圖)

[EnableClientAccess] 
public class CityInfoFull 
{ 
    [Key] 
    public int Id { get; set; } 

    public String Country{ get; set; } 
    public String Region { get; set; } 
    public String City { get; set; } 
    public int Population { get; set; } 
    public DateTime Founded { get; set; } 
} 

的RIA在Geography.Web.g.cs

在同一命名空間生成適當的代理類,我有另一個類:

[EnableClientAccess] 
public class Person 
{ 
    [Key] 
    public int Id { get; set; } 

    public String FullName { get; set; } 
    public DateTime DateOfBirth { get; set; } 
} 

但是,RIA不想爲這個類生成代理。我需要Silverlight應用程序中的代理,並且不會生成代理。

這可能是什麼原因?我不知道該往哪裏看。

我已經試過:

  • 選中該文件設置爲編譯
  • 選中該文件是在適當的命名空間
  • 重建包含該文件的Web項目
  • 重建SL項目
  • 刪除.g.cs文件並重建項目。
  • 檢查是否生成任何其他代理類。 (我發現我創建的任何新類都沒有代理,但是如果我更改已經存在的類,它們的代理將被更新,但是沒有創建新的代理。似乎只有在某個點之前創建的類是生成並從此創建的所有東西都沒有得到它的代理,即使我刪除.g.cs並讓RIA重新生成.g.cs)。

這一切都沒有奏效。我還可以做些什麼?

+0

您是否爲CityInfoFull和Person定義了查詢操作? – Jehof

+1

我爲CityInfoFull定義了一個,但我沒有爲Person定義。請不要告訴我,RIA框架只有在某些查詢/調用操作中使用時纔會生成實體......我的早晨......;)如果這是真的,請您將此形式作爲答案,以便我們可以總結這個問題。 –

回答

5

您需要在您的域服務中爲您希望在silverlight項目中使用的每個實體定義一個查詢方法。在你的情況下,你必須定義一個查詢操作CityInfoFullPerson

public class MyDomainSerivce : DomainService { 

    public IQueryable<CityInfoFull> GetCities() { 
    // your logic 
    } 

    public IQueryable<Person> GetPersons() { 
    // your logic 
    } 
} 

如果要允許指定類型的entites的可插入,更新,並在您需要定義相應的插入 - ,更新 - 和你的DomainService爲實體刪除的操作Silverlight應用程序中刪除。

查看WCF RIA Services文檔以獲取更多詳細信息。