2012-12-14 190 views
0

我們目前使用sp和udf來生成一個XML文檔,該文檔通過Web服務發送到客戶端供消費。我之前使用過一個ORM(實體和開放訪問),但我一直直接與單個類(表)交互。如果我有需要轉換多個表的數據,我會在代碼中拆分它,並更新所屬數據的ORM類(表)。創建複雜的實體對象

我想知道如果我能得到一個比較複雜一點。我可以以某種方式在ORM中創建一個複合對象,它是所有這些字段的集合。換句話說,我會傳遞給我的複雜orm對象的構造函數所需的記錄鍵。然後該對象從所有表中收集所需的信息並返回給我對象.....然後我可以序列化爲xml併發送它。

我的理解是某處ORM或DB我必須要所有的作品濟濟一堂所以真的只是爲了尋找輸入的邏輯。

回答

1

如果我想由來自多個表我只是添加所有表到.edmx文件數據的對象。從那裏我可以創建一個能夠得到我想要的任何東西的類。沒有必要進行1:1配對。在我的創建對象的方法中,基於TableA的主鍵,你可以這樣做;

Obj GetObj(string primaryKey) 
    { 
     dataBase context = new dataBase(); 
      var obj = (from a 
        in context.TableA 
        where a.Id == primaryKey 
        select a); 
      var otherObj = (from b 
          in context.TableB 
          where b.Id == a.ForeignKey 
          select b); 

     Obj foo = new Obj(); 

     foo.Id = a.Id; 
     foo.SomethingElse = a.Somthing; 
     foo.FromB = b.Id; 
     foo.AnInt = (int)b.count; 

     return foo; 
    } 

要保存一些更改;

void AddNewObject() 
    { 
     dataBase context = new Context; 
     TableA a = new TableA(); 
     TableB b = new TableB(); 

     a.Id = this.Id; 
     a.OtherField = this.OtherField; 
     b.Key = this.BKey; 
     b.SomeInt = this.SomeInt; 

     context.AddObject("TableA", a); 
     context.AddObject("TableB", b); 

     context.SaveChanges(); 
    } 

當然這些都需要我沒有包括一些錯誤處理,但概念不是從當你有標準EntityObject <不同 - >表的映射。我認爲保留一些正常的映射然後在上面建立你的類是更簡單的。

+0

它是否反向工作?我可以給我的複雜對象,告訴它承諾,它會做拆除? I.E.沿着雙向數據地圖的線條。 – GPGVM

+0

@ user1278561您必須編寫另一種方法將對象屬性映射到表及其屬性。我會添加一個小例子。 – evanmcdonnal