2010-05-12 35 views
1

我有一個使用Guid的PK數據庫,插入後會生成一個NewId()。我有一個EF數據上下文設置指向該數據庫與主鍵設置與實體鍵:真,Setter:私人和StoreGeneratedPattern:身份,因爲我想數據庫管理密鑰,並沒有代碼設置PK屬性。由於主鍵約束,無法將新對象提交給WCF DataService

我有一個的OData(System.Web.Data.Services.DataService)端點訪問此數據(就像:Hanselman did

我有了一個服務引用這項服務在嘗試另一個應用程序。從這個參考(即產品)創建一個新的對象,做

var serviceEntities = new ServiceEntities(serviceUri); //OData endpoint 

var product = new Product(); 
product.Name = "New Product"; 

serviceEntities.AddToProducts(product); 
serviceEntities.SaveChanges(); // error happens here 

時調試時,我看Product.ProductId屬性的產品編號主鍵是被默認爲Guid.Empty和它的設置Guid.Empty 。當調用SaveChanges時,我不希望將ProductId字段發送到服務。我得到的響應是:

處理請求流時出錯。 屬性'ProductId'屬性爲只讀 ,不能更新。請 確保此屬性不是 存在於請求負載中。

有沒有辦法做到這一點或我能做些什麼來正確地獲得這個設置,並仍然有數據庫生成密鑰。

下面是與上述產品示例相同的設置。 alt text http://i42.tinypic.com/157g593.png

回答

0

我最終做的是增加一個ChangeInterceptor。這可行,但它不是這樣做的首選方式。

[ChangeInterceptor("Products")] 
public void OnChangeApplications(Product product, UpdateOperations operations) 
{ 
    if (operations != UpdateOperations.Add) return; 

    if (product.ProductId == Guid.Empty) 
    { 
     product.ProductId = Guid.NewGuid(); 
    } 
}