2

我正在使用Visual Studio 2012並在C#上進行開發。我剛開始創建一個WCF Web服務,我通過模型優先方法創建了數據庫,到目前爲止,我已經能夠插入,更新,刪除和獲取條目到簡單的表中,但是我遇到了一個問題:I不知道如何發送與另一個表有關係的表的參數。我必須發送什麼樣的參數給WCF端點才能將條目插入到與另一個表具有關係的表中?

爲了更好地解釋我的疑問,下面是一個例子:我有一個Regions表,然後我有另一個表稱爲Clusters,一個區域有許多集羣,一個集羣屬於一個區域。

由EF創建的結果類是這樣的:

public partial class Regions 
{ 
    public Regions() 
    { 
     this.Clusters = new HashSet<Clusters>(); 
    } 

    public int RegionId { get; set; } 
    public string Name { get; set; } 
    public string Point { get; set; } 
    public System.DateTime CreatedDateTime { get; set; } 
    public System.DateTime UpdatedDateTime { get; set; } 

    public virtual ICollection<Clusters> Clusters { get; set; } 
} 

public partial class Clusters 
{ 

    public int ClusterId { get; set; } 
    public System.DateTime CreatedDateTime { get; set; } 
    public System.DateTime UpdatedDateTime { get; set; } 

    public virtual Regions Region { get; set; } 
} 

有了這種關係,我怎麼可以添加一個新的集羣?我添加新集羣的端點接收一個JSON字符串的字符串,我將其反序列化爲一個集羣對象。我反序列化這樣的:

Clusters cluster = new JavaScriptSerializer().Deserialize<Clusters>(data); //data is the JSON string 

在這種情況下,我會發送到JSON字符串的唯一信息將是該集羣屬於(日期時間創建時的對象是本區域添加到服務器端),但是如何將區域信息發送到JSON中以便將其添加到羣集中?

我的意思是,我必須發送一個看起來像這樣的JSON字符串嗎?

{"RegionId":2} 

因爲如果我這樣做,沒有條目,我還得別的嗎?

我真的很陌生,使用EF和WCF Web服務,任何幫助將不勝感激。

+0

您的集羣實體似乎沒有該區域的外鍵。這是故意的嗎?我相信,如果沒有外鍵,你將不得不使用$鏈接來更新關係。如果你有外鍵,你應該能夠更新實體並相應地設置外鍵屬性。 – Pawel

+0

我從一個模型創建了數據庫,並且我添加了導航屬性來關聯這兩個表,我不知道這些是外鍵還是應該如何創建它們,我還沒有使用實體框架模型 - 第一種方法 –

+0

要創建一個外鍵屬性,在依賴端添加一個新的標量屬性,然後雙擊該關係並相應地設置屬性(參見本教程以獲取更多詳細信息http://msdn.microsoft。COM/EN-US /訂閱/ jj713299.aspx)。或者你可以砍一下。由於不管模型中是否有外鍵屬性,數據庫都不應該改變,所以你可以嘗試從你之前創建的數據庫創建模型 - 確保檢查「創建外鍵」(或類似的東西)複選框。還要備份你的模型,以防萬一... – Pawel

回答

0

從我收集的內容來看,你有兩種方法來保存你的cluseters。第一個是作爲儲蓄或地區的副產品。如果你有基本的CRUD WCF端點,你可以簡單地在你的客戶端中構建Region實體,添加這些簇,然後調用保存。

var reg = new Region(); 
//set region properties 
//build clusters set 
for (int i = 0; i<5; i++) 
    reg.Clusters.add (new Cluster {CreatedDateTime= DateTime.Now, 
            UpdatedDateTime = DateTime.Now}); 

wcfClient.SaveRegion(reg); //<-- if the back-end works with EF, this should be able 
          //to insert one new region with five new clusters 

您的其他選項是通過WCF端點來保存羣集,WCF端點旨在自己保存羣集。在做這件事之前,我會建議你修改你的Clusters實體以明確地有一個RegionId字段。

public partial class Clusters 
{ 

    public int ClusterId { get; set; } 
    public System.DateTime CreatedDateTime { get; set; } 
    public System.DateTime UpdatedDateTime { get; set; } 

    public int RegionsId {get; set;} 
    public virtual Regions Region { get; set; } 
} 

實體框架應該能夠自動識別RegionsId對應於Regions實體的主鍵。在此之後,這只是確保您創建的每個羣集都具有適當的RegionsId屬性。當您調用「wcfClient.SaveCluster(cluster)」方法時,EF會自動將該羣集鏈接到適當的區域。

+0

所以如果我的模型暴露給外鍵,如果我在我的JSON字符串上發送RegionId,然後將其插入到Cluster對象中,然後保存該對象,兩個實體之間的關係是否會確保RegionId屬於現有進入地區? –

+0

是的。我們在我們的項目中就是這樣做的。關鍵是具有良好的CRUD方法,可以接受系統中的任何實體。最終,目標是調用類似以下內容:「context.Set ().Insert(clusterObj);」只要clusterObj包含「regionsId」字段,它將被正確插入到數據庫中,並且可以遍歷關係。另外請注意,您可以使用數據註釋來指定「必需」或「最大長度」等字段屬性。這將有助於EF –

+0

自動爲您完成數據完整性驗證,但我使用的是模型優先方法,是否可以使用數據註釋?我新與EF –

相關問題