2011-10-03 58 views
1

我正在將RIA Services與實體框架用於我的Silverlight應用程序的數據層。我有兩塊保存對RIA服務中急切加載的關聯的更改


public class Installation 
{ 
    [Key] 
    public string Serial { get; set; } 
    public string Description { get; set; } 
    [Column("District")] 
    public Guid? DistrictID { get; set; } 

    [Include] 
    [Association("InstallationDistrict", "DistrictID", "DistrictID")] 
    public District District { get; set; } 
} 

public partial class District 
{ 
    [Key] 
    public Guid DistrictID { get; set; } 
    public string DisplayName { get; set; } 
} 

我使用EF代碼第一次對我的實體在一個多到一的關係相關的實體。

下面是服務的代碼:


[EnableClientAccess] 
public class EagerLoadingService : DomainService 
{ 
    private readonly CentralContext _context; 
    public EagerLoadingService() 
    { 
     _context = new CentralContext(); 
    } 
    [Query] 
    public IQueryable GetInstallations() 
    { 
     return _context.Installations.Include("District"); 
    } 
    [Update] 
    public void UpdateInstallation(Installation i) 
    { 
     _context.Installations.Find(i.Serial).District = i.District; 
     _context.SaveChanges(); 
    } 
    [Query] 
    public IQueryable GetDistricts() 
    { 
     return _context.Districts; 
    } 
} 

當加載安裝,我有相關的區,工作正常(我得到在客戶端的實體)。但是,當我更改客戶端上的區域並嘗試更新時,實體和服務上下文中的HasChanged標誌仍爲false,並且關聯的外鍵不會更改(安裝記錄上的區域ID)。

有沒有辦法讓我的工作方式,我期待它?

+0

可能由於某些原因,這些區域正在分離。檢查您嘗試保存的EntityState。 – alf

+0

EntityState未修改。也許這與我設置實體的方式有關。我將更新並添加一些關於實體類的更多細節。 –

+1

也許驗證失敗,您正在修改的字段。嘗試打開服務生成的代碼文件(Generated_Code文件夾)並在setter中爲該屬性設置一個斷點。 – alf

回答

1

原來我正在做不正確的關聯屬性。它需要是


[Association("InstallationDistrict", "DistrictID", "DistrictID", IsForeignKey = true)] 

感謝this guide指出。